Launchd প্রতি দুই ঘন্টা একটি Applescript চলমান


1

আমি একটি ছোট আপেলস্ক্রিপ্ট লিখেছি যা আমি প্রতি 2 ঘন্টা স্বয়ংক্রিয়ভাবে চালাতে চাই। আমি এইভাবে নিম্নলিখিত লঞ্চড ডেমন লিখেছি (সম্ভবত এটি একটি এজেন্ট):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.zerowidth.launched.aspect</string>
        <key>Program</key>
        <string>/usr/bin/osascript</string>
        <key>ProgramArguments</key>
        <array>
                <string>osascript</string 
                <string>/Users/***/my_script.scpt</string>
        </array>
        <key>StandardOutPath</key>
        <string>/Users/***/file_log.log</string>
        <key>RunAtLoad</key>
        <true/>
        <key>ThrottleInterval</key>
        <integer>7200</integer>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

তারপর আমি টার্মিনাল খোলা আছে এবং সম্পন্ন

launchctl load ~/Library/LaunchAgents/com.zerowidth.launched.aspect.plist 

এটা সূক্ষ্ম কাজ, কিন্তু শুধুমাত্র একবার এবং প্রতি দুই ঘন্টা না। কনসোল পরীক্ষা করে আমি নিম্নলিখিত বার্তা পেয়েছি (এবং আরো অনেক কিছু):

com.apple.xpc.launchd [1] (com.zerowidth.launched.aspect): এই সেবা   ক্রমাগত চলমান সংজ্ঞায়িত করা হয় এবং স্বতঃস্ফূর্তভাবে অক্ষম।

ডিসেম্বর 16 17:02:25 এয়ার-অফ-ম্যান -2 com.apple.xpc.launchd [1]   (com.zerowidth.launched.aspect): পরিষেবা শুধুমাত্র 7 সেকেন্ডের জন্য দৌড়ে।   7193 সেকেন্ড দ্বারা শ্বাস ফেলা।

আপনি কি অনুগ্রহ করে আমাকে বুঝতে সাহায্য করতে পারেন? আমি কিভাবে প্রতি দুই ঘন্টা আপেল স্ক্রিপ্ট চালাতে পারেন?

ধন্যবাদ।


সম্পাদনা করুন। আমি রবার্টের পরামর্শ, পাইথন স্ক্রিপ্ট এবং অ্যাপ্লিপলিপ্ট অনুসরণ করি।

এখানে পাইথন স্ক্রিপ্ট। এটি কনসোলকে LocateMe কমান্ডটি চালানোর জন্য অনুরোধ করে এবং এর থেকে এটি আমার অবস্থানের অক্ষাংশ এবং দ্রাঘিমাংশ প্রাপ্ত করে। তারপর এই স্থানটির সূর্যাস্ত এবং সূর্যোদয়ের সময় পেতে একটি API কে কল করে। অবশেষে একটি ছোট ফাংশন সিদ্ধান্ত নেয় কিনা তা দিন (সূর্যোদয় & lt; এখন

output = os.popen('/Users/***/Desktop/LocateMe').read()
###I extract my coordinates 
coord = output[1:25]
lat = float(coord[1:12]) ###latitude
long = float(coord[13:25]) ### longitude

my_sunrise, my_sunset = get_ris_and_set(lat, long) ##this function calls an API that gives sunset and sunrise time in the position given by (lat,long)
my_sunset1 = my_sunset.time()
my_sunrise1 = my_sunrise.time()

result = str(is_day(now.time(), my_sunrise1, my_sunset1))
### compare the time now and returns true if it is day false otherwise    
with open('/Users/***/Desktop/log_file.txt', 'a') as f:
        print(result, file=f)
sys.exit()

এখানে অ্যাপ্লিপলিপ্ট: এটি উপরে পাইথন স্ক্রিপ্ট চালায় এবং বুলিয়ান মানটি পড়ায় (যদি এটি দিন বা না হয়)। তারপর Mojave নেভিগেশন অন্ধকার মোড যদি এটি পরীক্ষা করে এবং প্রয়োজন হলে এটি সুইচ।

tell application id "com.apple.systemevents"
tell application "Terminal"
    do shell script "/usr/local/bin/python3 /Users/***/Desktop/python.py $@"
end tell

tell appearance preferences
    set value to do shell script "tail -n 1 /Users/***/Desktop/log_file.txt"
    if dark mode is true and value = "True" then
        set dark mode to false
    else if dark mode is false and value = "False" then
        set dark mode to true
    else
        return
    end if
end tell
end tell

এটি আবার চালানোর জন্য আপনার শেষ সেবা কমান্ড কোথায়।
Buscar웃

@ বুস্কার 웃 আমি দুঃখিত কিন্তু আমি প্রবর্তিত একটি নবাগত নই ... আমি নিশ্চিত নই যে আমি আপনার মন্তব্যটি বুঝতে পেরেছি। অনুগ্রহপূর্বক অনুগ্রহ করে একটু বেশি স্পষ্ট হতে পারেন, দয়া করে? আপনার ধরনের সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ!
Romeo

launchd সঠিকভাবে আপনার স্ক্রিপ্ট প্রতি দুই ঘন্টা চলমান হয়। যাইহোক, মনে হচ্ছে আপনার স্ক্রিপ্ট ক্রমাগত চলছে এবং একটি সেট বিরতিতে এটি ক্রমাগত চলমান স্ক্রিপ্ট চালানোর জন্য অক্ষম। আপনার স্ক্রিপ্ট কি অনুমিত হয়?
Allan

মিঃ, আমি দেখি। আপনার উত্তরের জন্য ধন্যবাদ! আমার আপেলস্ক্রিপ্ট একটি পাইথন স্ক্রিপ্ট (!) চালায় যা মূলত বর্তমান সময়টি পরীক্ষা করে এবং দিনের বা রাতে কিনা তা নির্ধারণ করে (আমার অবস্থানের উপর নির্ভর করে)। তারপর এটি মোজাভ ডার্ক-মোড চালু / বন্ধ করে। কিভাবে আমি একটি ভাল ভাবে এই হ্যান্ডেল করতে পারেন? সম্ভবত আমি অ্যাপ্লিপ্রিপ্টের ভিতরে একটি নির্দেশনা সেট করতে চাই যাতে এটি ক্রমাগতভাবে চলবে না ... ধন্যবাদ!
Romeo

আপনার পাইথন স্ক্রিপ্ট রান অনুমান করা, তারিখটি পরীক্ষা করে, যা বের করে তার প্রয়োজন হয়, তারপর এটি ক্রমাগত চলবে না (যদি না আপনার কোন ত্রুটি থাকে তবে এটি কোনটির জন্য অপেক্ষা করছে।) কেন, আপনার কাছে কেন KeepAlive সত্য সেট?
Allan

উত্তর:


2

নন StartInterval সময়সীমা চলমান জন্য কী? আপনার ক্ষেত্রে, 7200 (সেকেন্ড) সেট?

https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#//apple_ref/doc/uid/10000172i-SW7-SW7


ফ্যান্টাস্টিক! এটা আমি চেয়েছিলেন ঠিক ঠিক কাজ করে, আপনাকে অনেক ধন্যবাদ! বিটিউ, আপনি কি স্টার্টইনভারভাল এবং থ্রোটল ইন্টারভারল এর মধ্যে পার্থক্য জানেন? যদি আপনি উপরের কোডটি পড়ে থাকেন, আপনি কি মনে করেন এটি কার্যকর করার জন্য একটি লাইটার উপায় আছে? অনেক ধন্যবাদ, আমি আপনার উত্তরটি গ্রহণ করার পরিকল্পনা করছি এবং আপনাকে অনুদান দিচ্ছি (যদি এর মধ্যে অন্য কোনো উত্তর উপস্থিত না হয়)। ধন্যবাদ! :-D
Romeo

আমি বিশ্বাস করি ThottleInterval হয় কত ঘন ঘন আপনার প্রক্রিয়া হয় অনুমতি স্পন করা; অর্থাৎ, কত তাড়াতাড়ি এটি আবার চালানোর অনুমতি দেওয়া হবে। যাইহোক, এটি আসলেই নথিভুক্ত নয়, তাই আপনাকে যদি এটি করতে না হয় তবে আমি এটার সাথে জগাখিচুড়ি করব না।
Geoff Nixon

1

আমরা আপনার সব স্ক্রিপ্ট দেখতে হবে। [তারা ছোট, বা পোস্ট করার আগে সহজ। ] আপনি আপনার plist থেকে পাইথন স্ক্রিপ্ট আহ্বান করতে পারে। সম্ভবত আপনার স্ক্রিপ্ট মধ্যে অলঙ্কৃত লুপ প্রক্রিয়া আছে। আপনি আপনার স্ক্রিপ্ট ডিবাগ তথ্য রাখা উচিত। আপনার আপেলস্ক্রিপ্ট এবং ফাইটন স্ক্রিপ্টের একটি ফাইলে লিখুন। আপনার আপেলস্ক্রিপ্টের শেল স্ক্রিপ্টে "তারিখ & gt; & gt; mylogfile # 1" এর মতো কিছু রাখুন। টার্মিনাল মধ্যে সিনট্যাক্স চেক আউট:

mac $ date >> mylogfile#1
mac $ date >> mylogfile#1
mac $ date >> mylogfile#1
mac $ cat mylogfile#1 
Sun Dec 16 19:32:17 EST 2018
Sun Dec 16 19:32:21 EST 2018
Sun Dec 16 19:32:23 EST 2018

একটু বেশি উত্তাপ সহায়ক হতে পারে। আপনার স্ক্রিপ্ট আহ্বান করা হচ্ছে কিনা এই ভাবে আপনি বলতে পারেন।

আপনি সম্পূর্ণরূপে আপেলcript মধ্যে এই কাজ করতে পারেন। নিচে স্ক্রোল করুন "এখন আমাদের পটভূমিতে এই কমান্ডটি নিয়মিত চলতে হবে।"

http://scriptingosx.com/tag/stay-open/

নোটিফিকাল রুটিন সময়টি ফেরত দিচ্ছে তার পরে লক্ষ্য করুন যে নিষ্ক্রিয় হ্যান্ডলারটি আবার চালু হবে।

রবার্ট


আপনার আগ্রহের জন্য আপনাকে অনেক ধন্যবাদ এবং দেরী উত্তর দেওয়ার জন্য দুঃখিত। ভাল পয়েন্ট, নিষ্ক্রিয় সঙ্গে এটি কাজ করে। কিন্তু আমি সৎভাবে নিষ্ক্রিয় সমাধান খুব পছন্দ করি না। অবশেষে ডেস্কটপে পটভূমিতে সর্বদা খোলা থাকা একটি অ্যাপ্লিকেশন যা সবসময়ই খোলা থাকে ... কোনও ক্ষেত্রে, আমি এটি চালু করতে চাই যাতে আমি নতুন কিছু শিখতে পারি। আমি আপনার পরামর্শ অনুসরণ করব এবং পুরো স্ক্রিপ্টটি OP তে রাখব। আমি আশা করি তুমি আমাকে সাহায্য করতে পারবে। আপনাকে অনেক ধন্যবাদ.
Romeo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.