मैं हर बार चलाने के लिए एक कार्य कैसे निर्धारित करूं?


84

मेरे पास हर 30 मिनट में एक स्क्रिप्ट कैसे चलती है? मेरा मानना ​​है कि विभिन्न ओएस के लिए अलग-अलग तरीके हैं। मैं ओएस एक्स का उपयोग कर रहा हूं।

जवाबों:


136

बस लॉन्च का उपयोग करें । यह एक बहुत शक्तिशाली लॉन्चर सिस्टम है और इस बीच यह मैक ओएस एक्स (वर्तमान ओएस एक्स संस्करण भी बिना बूट नहीं होगा) के लिए मानक लॉन्चर सिस्टम है। जो लोग से परिचित नहीं हैं के लिए launchd(या सामान्य रूप में ओएस एक्स के साथ), यह के बीच एक संकर नस्ल की तरह है init, cron, at, SysVinit ( init.d), inetd, upstartऔर systemd। इन सभी परियोजनाओं की अवधारणाओं को समझना, फिर भी उन चीजों की पेशकश करना जो आपको कहीं और नहीं मिल सकती हैं।

हर सेवा / कार्य एक फ़ाइल है। फ़ाइल का स्थान प्रश्नों पर निर्भर करता है: "यह सेवा कब चलना है?" और "किन विशेषाधिकारों के लिए सेवा की आवश्यकता होगी?"

सिस्टम कार्य करने के लिए जाना

/Library/LaunchDaemons/

यदि वे चलेंगे, तो कोई बात नहीं अगर कोई उपयोगकर्ता सिस्टम में लॉग इन है या नहीं। उन्हें "मूल" विशेषाधिकारों के साथ शुरू किया जाएगा।

यदि वे केवल तभी चलेंगे जब कोई उपयोगकर्ता लॉग इन होता है, तो वे जाते हैं

/Library/LaunchAgents/

और उस उपयोगकर्ता के विशेषाधिकारों के साथ क्रियान्वित किया जाएगा जो अभी लॉग इन हुए हैं।

यदि वे केवल तभी भागेंगे यदि आप लॉग इन हैं, तो वे जाते हैं

~/Library/LaunchAgents/

जहां ~ आपकी गृह निर्देशिका है। ये कार्य आपके विशेषाधिकारों के साथ चलेंगे, जैसे कि आपने उन्हें कमांड लाइन द्वारा या फाइंडर में एक फ़ाइल पर डबल क्लिक करके स्वयं शुरू किया था।

ध्यान दें कि वहाँ भी मौजूद है /System/Library/LaunchDaemonsऔर /System/Library/LaunchAgents, लेकिन हमेशा की तरह, सब कुछ /SystemOS X द्वारा प्रबंधित किया जाता है। आप किसी भी फाइल को वहां नहीं रखेंगे, आप वहां कोई फाइल नहीं बदलेंगे, जब तक कि आप वास्तव में यह नहीं जानते कि आप क्या कर रहे हैं। सिस्टम फ़ोल्डर में आस-पास मैसेज करना आपके सिस्टम को अनुपयोगी बना सकता है (इसे ऐसी स्थिति में ले जाएं जहां यह फिर से बूट करने से मना कर देगा)। ये वे निर्देशिकाएं हैं जहां Apple उन launchdकार्यों को करता है जो आपके सिस्टम को बूट के दौरान उठते और चलते हैं, स्वचालित रूप से आवश्यक के रूप में सेवाएं शुरू करते हैं, सिस्टम रखरखाव कार्य करते हैं, और इसी तरह।

हर launchdकार्य में एक फाइल होती है, जिसमें प्रारूप होता है। इसमें रिवर्स डोमेन नेम नोटेशन होना चाहिए। जैसे आप अपने कार्य को नाम दे सकते हैं

com.example.my-fancy-task.plist

इस प्लिस्ट में विभिन्न विकल्प और सेटिंग्स हो सकते हैं। एक हाथ से लिखना सबॉप्टीमल है , आप मुफ्त उपकरण लिंगोन प्राप्त करना चाह सकते हैं अपने कार्यों को बनाने के । यह टूल मुफ्त में उपयोग किया जाता था, अब इसकी कीमत ऐप स्टोर में $ 5 है और नॉन ऐप स्टोर संस्करण के रूप में $ 10 है (नॉन ऐप स्टोर संस्करण बहुत अधिक शक्तिशाली है और यदि आप पहले से ही इसके लिए भुगतान करने की योजना बना रहे हैं, तो गंभीरता से, नॉन ऐप स्टोर प्राप्त करें संस्करण)। यदि किसी को एक तुलनीय उपकरण पता है जो फ्रीवेयर या ओपन सोर्स है, तो मुझे टिप्पणियों में एक पंक्ति छोड़ दें और मैं यह सलाह दूंगा कि एक (वाणिज्यिक सॉफ्टवेयर के लिए यहां विज्ञापन नहीं करना चाहते हैं)।

एक उदाहरण के रूप में, यह इस तरह दिख सकता है

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.my-fancy-task</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/my-script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>1800</integer>
</dict>
</plist>

यह एजेंट शेल स्क्रिप्ट /usr/local/bin/my-script.sh को हर 1800 सेकंड (हर 30 मिनट) पर चलाएगा। आपके पास कुछ निश्चित तिथियों / समयों पर कार्य चलाया जा सकता है (मूल रूप से लॉन्च सब कुछ क्रोन कर सकता है) या आप "ओनडेमैंड" को भी अक्षम कर सकते हैं, जिससे लॉन्च को स्थायी रूप से चालू रखने के लिए लॉन्च किया जा सके (यदि यह समाप्त हो जाता है या क्रैश हो जाता है, तो लॉन्च तुरंत शुरू हो जाएगा) । आप यह भी सीमित कर सकते हैं कि कोई प्रक्रिया कितने संसाधनों का उपयोग कर सकती है (जैसा कि पहले कहा गया था, लिंगोन इन सभी सेटिंग्स को एक अच्छे यूआई इंटरफ़ेस में दिखाता है)।

अद्यतन: भले ही OnDemandअभी भी समर्थित है, यह पदावनत है। नई सेटिंग को नाम दिया गया है KeepAlive, जो बहुत अधिक समझ में आता है। यह एक बूलियन मान, जिस स्थिति में इसके बारे में ठीक विपरीत है हो सकता है OnDemand(करने के लिए इसे स्थापित करने के falseबर्ताव करता है के रूप में अगर OnDemandहै trueऔर इसका उल्टा)। महान नई विशेषता यह है कि, यह एक बूलियन के बजाय एक शब्दकोश मूल्य भी हो सकता है। यदि इसका शब्दकोश मूल्य है, तो आपके पास कुछ अतिरिक्त विकल्प हैं, जो आपको अधिक बढ़िया अनाज नियंत्रण प्रदान करते हैं, जिन परिस्थितियों में कार्य को जीवित रखा जाएगा। जैसे कि इसे केवल तभी तक जीवित रखा जाता है जब तक कि प्रोग्राम शून्य के निकास कोड के साथ समाप्त हो जाता है, जब तक कि डिस्क पर एक निश्चित फ़ाइल / निर्देशिका मौजूद है, केवल तभी जब कोई अन्य कार्य भी जीवित हो, या केवल तभी जब नेटवर्क वर्तमान में है।

इसके अलावा, आप मैन्युअल रूप से कमांड लाइन के माध्यम से कार्यों को अक्षम / अक्षम कर सकते हैं:

launchctl <command> <parameter>

कमांड को लोड या अनलोड किया जा सकता है, एक प्लास्ट को लोड करने के लिए या इसे फिर से लोड करने के लिए, जिस स्थिति में फ़ाइल के लिए पथ है। या कमांड शुरू या बंद किया जा सकता है, बस ऐसे कार्य को शुरू करने या रोकने के लिए, जिस स्थिति में पैरामीटर लेबल है (com.example.my- फैंसी-कार्य)। अन्य कमांड और विकल्प भी मौजूद हैं।

एप्पल के प्लिस्ट प्रारूप और launchctlकमांड लाइन टूल का दस्तावेज़ीकरण देखें (ध्यान दें कि आप शीर्ष पर OS X संस्करण का चयन कर सकते हैं, क्योंकि प्रारूप / विकल्प विभिन्न OS X रिलीज़ के बीच भिन्न होते हैं)


क्या होगा अगर मैं एक उपयोगकर्ता के रूप में कुछ करना चाहता हूं, तब भी जब मैं लॉग इन नहीं हूं? क्या यह संभव है, या क्या मुझे व्यवस्थापक से / लाइब्रेरी / लॉन्चडैमन्स में कुछ डालने के लिए कहना है?
मार्क बेकर

@ मार्क: हाँ, आपके व्यवस्थापक को यह करना होगा, और उपयोगकर्ता नाम और GroupName कुंजियों को .plist फ़ाइल में उचित रूप से सेट करना होगा।
स्टीव फ़ॉली

यह भी ध्यान दें कि तेंदुए और उससे आगे के लिए, OnDemand को KeepAlive कुंजी के पक्ष में हटा दिया गया है। अधिक जानकारी के लिए आदमी को लॉन्च किया।
स्टीव फ़ॉली

1
LaunchControl soma-zone.com/LaunchControl बहुत उपयोगी है, इसका एक असीमित परीक्षण है, जहां तक ​​मैं बता सकता हूं कि लाइसेंस प्राप्त संस्करण बनाम कोई सीमाएं नहीं हैं।
BaneOfSerenity

1
@MaciekRek StartCalendarIntervalदो शब्दकोशों की एक सरणी के साथ, दोनों कुंजी Minuteऔर एक बार के मूल्य के साथ 00और एक बार 30ठीक वही करेंगे जो आपने अनुरोध किया है। कृपया भविष्य में प्रश्नों के रूप में प्रश्न पूछें, टिप्पणियों के रूप में नहीं, फिर मैं आपको अंतिम शब्दकोष भी दिखा सकता हूं (मैं टिप्पणी में ऐसा नहीं कर सकता)। यह साइट सवाल पूछने के बारे में है। यदि आप प्रश्न पर किसी को संकेत देना चाहते हैं, तो प्रश्न के लिंक को टिप्पणी के रूप में पोस्ट करें, लेकिन प्रश्न ही नहीं।
मैकी

46

आप बहुत सुविधाजनक प्लास्ट जनरेटर का उपयोग कर सकते हैं: http://launched.zerowidth.com/ (कुछ भी खरीदने की आवश्यकता नहीं ...)

यह आपको पहले से ही सुझाए गए लॉन्च के साथ एक नई अनुसूचित नौकरी को पंजीकृत करने के लिए एक शेल-लाइनर देगा


11

MacOSX पर, आपके पास कम से कम निम्नलिखित विकल्प हैं:

  • एक "रन स्क्रिप्ट" कार्रवाई के साथ पुनरावृत्ति iCal अलार्म
  • launchd
  • क्रॉन ( link1 , link2 )

व्यक्तिगत अनुभव से, क्रोन सबसे विश्वसनीय है। जब मैंने परीक्षण किया, तो लॉन्च में कई बग और क्विरक्स थे। iCal अलार्म केवल तभी चलते हैं जब आप लॉग इन होते हैं (लेकिन ऐसा कुछ हो सकता है जिसे आप पसंद करते हैं)।


8

जैसा कि मेकी ने बताया, लॉन्चड इसके साथ जाने का रास्ता होगा। लॉन्च के लिए GUI इंटरफ़ेस है जिसे लिंगोन कहा जाता है जिसे आप चेक आउट करना चाह सकते हैं, जैसा कि लॉन्च फ़ाइलों को हाथ से संपादित करने का विरोध किया गया है:

लिंगोन मैक ओएस एक्स तेंदुए 10.5 के लिए एक संपादन लॉन्च विन्यास फाइल बनाने के लिए एक ग्राफिकल यूजर इंटरफेस है।

[स्निप ...]

कॉन्फ़िगरेशन फ़ाइल का संपादन इस संस्करण में पहले से कहीं अधिक आसान है और इसमें दो अलग-अलग मोड हैं। बेसिक मोड जिसकी सबसे सामान्य सेटिंग्स बहुत ही सरल इंटरफ़ेस और एक्सपर्ट मोड में आसानी से उपलब्ध हैं जहां आप सभी सेटिंग्स को सीधे टेक्स्ट में जोड़ सकते हैं या मेनू के माध्यम से सम्मिलित कर सकते हैं।


ईमानदारी से, यह एक महान, आसानी से उपयोग किया जाने वाला इंटरफ़ेस है जो बस हो जाता है और आपको आगे बढ़ने की अनुमति देता है। यदि आप समय पर कम हैं, तो यह रास्ता तय करना है।
जोशुआ पिंटर

4

MAC OS में एक Automator टूल है जो विंडोज़ में टास्क शेड्यूलर के समान है । और ऑटोमेटर का उपयोग करके आप दैनिक आधार पर कार्यों को शेड्यूल कर सकते हैं और दैनिक समय पर स्क्रिप्ट चलाने के लिए आवर्ती कैलेंडर ईवेंट के साथ कार्य को लिंक कर सकते हैं। मैक ओएस में दैनिक आधार पर स्क्रिप्ट चलाने के लिए लिंक देखें


कम से कम macOS कैटालिना (10.15.x) में, मुझे ऑटोमेकर के माध्यम से कैलेंडर में कार्यों को शेड्यूल करने का तरीका नहीं मिला। मेरे पास लिंगोन के साथ बहुत बेहतर परिणाम थे (अन्य उत्तर देखें जो लॉन्च करने के लिए इंटरफ़ेस के रूप में उल्लेख करते हैं)।
कैल्विनफ

2

ऐप्पल स्क्रिप्ट के लिए, मैं एक विशेष आईकैल कैलेंडर सेट करता हूं और उन्हें समय-समय पर चलाने के लिए अलार्म का उपयोग करता हूं। कमांड लाइन टूल के लिए, मैं लॉन्चड का उपयोग करता हूं।


1

FYI करें: जबकि मैं ऐसा करने से चूक जाता हूँ, यह क्रिप्टोकरेंसी है, क्रोन OS X पर अतीत की बात है। यह पैंथर पर नजर रखने वाला था। टाइगर के बाद से इसे लॉन्च किया गया है। तो अगर आप तेंदुआ क्रोन चला रहे हैं तो कोई विकल्प नहीं है।


0

कार्यों को शेड्यूल करने के लिए आप क्रोन का उपयोग कर सकते हैं।

crontab -e

निम्नलिखित प्रारूप में एक नौकरी निर्दिष्ट की जाती है।

* * * * *  command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)

उदाहरण:

0 12 * * *  cd ~/backupfolder && ./backup.sh

एक बार जब आप अपने क्रोन कार्यों को स्थापित कर लेते हैं, तो आप अपने कार्यों को सूचीबद्ध करने के लिए crontab -l का उपयोग कर सकते हैं।

crontab -l

यदि आप क्रोन शेड्यूल एक्सप्रेशन के बारे में अधिक जानना चाहते हैं, तो आप एक्सेस कर सकते हैं

https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.