बाद में चलाने के लिए एक कमांड शेड्यूल करें?


87

कमांड चलाने का एक सरल तरीका क्या है, कहते हैं, अब से 8 घंटे? मैं इस तरह से सोच सकता हूं:

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

क्या अधिक "उचित" तरीका है?


क्या कुछ गड़बड़ है nohup+ sleep? यह "अनुचित" क्यों है?
cprn

जवाबों:


123

आप atकमांड का उपयोग कर सकते हैं । atबाद में आदेश पर अमल। atउपयोगिता मानक इनपुट और उन्हें एक साथ समूह से आदेश पढ़ा जाएगा के रूप में एक पर नौकरी, बाद में निष्पादित किया जाना है।

आमतौर पर, atउबंटू में डिफ़ॉल्ट रूप से स्थापित किया जाता है, लेकिन यदि आपकी रिलीज़ में यह शामिल नहीं है, तो इसके माध्यम से इंस्टॉल करें:

sudo apt-get install at

अधिक जानकारी के लिए, विकल्प, उदाहरण और अन्य लोग उबंटू मैनपेज रिपोजिटरी देखते हैं

उदाहरण:

at now +8 hours -f ~/myscript.sh

आप सुविधाजनक शॉर्टहैंड का उपयोग कर सकते हैं, जैसे tomorrowया noon, जैसा कि अंदर

echo "tweet fore" | at teatime 

चेतावनी: यह कमांड को पाइप के बाईं ओर तुरंत चलाएगालेकिन केवल इसका आउटपुट बाद में प्रस्तुत करेगा। उदाहरण यह भी दर्शाता है कि आप कार्यों को कैसे पाइप कर सकते हैंatat -cजिस तरह से आप अनुसूचित कार्यों की जांच कर सकते हैं, जिसे आप उनकी संख्या के साथ आसानी से सूचीबद्ध कर सकते हैं:

at -c 3

19
यह एक साधारण उपयोग उदाहरण को जोड़ने के लिए सहायक हो सकता है जो मूल पोस्टर के प्रश्न को अधिक विशेष रूप से संबोधित करता है जैसेat now +8 hours -f ~/myscript.sh
स्टीलड्राइवर

6
इसके अलावा, at 8:00एक निरपेक्ष समय पर कमांड को चलाना है, और batch"जब यह कंप्यूटर बेकार लग रहा है" के लिए
साइमन रिक्टर

4
यदि कोई सोच रहा था, teatimeतो शाम 4 बजे होगा। कुछ कारणों से उस में नहीं उल्लेख किया गया है manpages.ubuntu.com/manpages/raring/man1/at.1posix.html लेकिन यह में है man atऔर यहाँ manpages.ubuntu.com/manpages/raring/en/man1/at.1.html
दान

3
शायद हम यह उल्लेख कर सकते हैं कि "एट" उपयोगिता डिफ़ॉल्ट रूप से स्थापित नहीं है और अगर कोई और इसे प्राप्त करना चाहता है तो बस "एट" पैकेज स्थापित करें? संपादित करें: वैसे भी, मैंने बस जवाब संपादित किया (मैनपेज लिंक भी तय किया है)।
दिलकांदगी

4
खबरदार कि पाइपिंग में कमांड तुरंत चलेगी और केवल आउटपुट शेड्यूल करेगी। मेरे पास 4 घंटे का 3 डी प्रिंट विफल था क्योंकि मैं शेड्यूल करना चाहता था gpio write 8 1लेकिन इसे तुरंत निष्पादित किया गया।
मैकीज स्विक

8

हां, आप क्रॉन जॉब सेट कर सकते हैं।

उदाहरण के लिए, यदि अब समय 14:39:00 है और आज शुक्रवार है, तो 30 अगस्त, आप crontab -eकमांडो का उपयोग करके अपने crontab फ़ाइल में निम्नलिखित क्रॉन जॉब (8 घंटे के बाद निष्पादित करने के लिए) जोड़ सकते हैं :

39 22 30 8 5  /path/to/mycommand.sh

के बारे में अधिक:


3
ठीक है, हां, मुझे उल्लेख करना चाहिए था कि मैं क्रॉन नौकरियों के बारे में जानता हूं। यह और भी गड़बड़ है क्योंकि तब यह चारों ओर से अनिश्चित काल के लिए क्रेटाब में बैठ जाता है, है ना?
स्टीव बेनेट

4
@ RaduRădeanu: क्रॉन, सावधान कि यह कुछ ही वर्षों में फिर से आग सकता है (जब वहाँ एक शुक्रवार अगस्त घटित का एक और 30 वीं है) के साथ ...
ओलिवर Dulac

2
यह एक चतुर हैक है। हालांकि 'एट' ज्यादा बेहतर तरीका है। अगर कंप्यूटर को 14:39 पर बंद कर दिया जाता है तो क्या होगा?
एमोरी

1
Err कि अभी भी मेरी बात नहीं है। मेरा कहना यह है कि आपके द्वारा दर्ज किया गया पाठ (मुझे लगता है) शाब्दिक रूप से इस घटना के बाद भी आपके साथ एक साथ बैठकर आपके लिए एक और सफाई का काम करेगा।
स्टीव बेनेट

2
@SteveBennett हाँ, आप सही हैं। crontabजब तक आप इसे हटाते हैं, तब तक कमांड आपके पास रहेगा। एक साल बाद, जब आप भूल गए हैं कि इसे वहां किसने और क्यों रखा है, तो आप अपने सिर को खरोंचते हुए छोड़ देंगे और सोचेंगे कि कमांड का क्या करना है।
धान लैंडौ

8

के लिए Gnome-आधारित जीयूआई का उपयोग करें cron, atऔर जैसे:

CronHowto की शुरूआत में gnome-schedulegui का उपयोग करने का सुझाव दिया गया है , जो टर्मिनल में सभी कूड़ेदानों को टाइप करने की तुलना में बहुत अच्छा है (esp। "औसत" उबंटू उपयोगकर्ताओं के लिए जो "पावर" * nix / bsd उपयोगकर्ता नहीं हैं।)

अनुसूचित कार्य या चलाने के लिए एकता डैश (या अन्य एप्लिकेशन मेनू) का उपयोग करके इसे चलाएं gnome-schedule

Gnome- आधारित उबंटू सिस्टम पर Gnome शेड्यूल किए गए कार्य टूल (सूक्ति-शेड्यूल पैकेज से) अनुप्रयोगों में -> सिस्टम टूल क्रोन का उपयोग करने के लिए संकेत के साथ एक ग्राफिकल इंटरफ़ेस प्रदान करता है। परियोजना की वेबसाइट http://gnome-schedule.sourceforge.net/ पर है ; सॉफ़्टवेयर सॉफ़्टवेयर केंद्र से या टाइप करके इंस्टॉल करने योग्य है

sudo apt-get install gnome-schedule

एक टर्मिनल में।

का उपयोग करते हुए gnome-schedule, अपने घर निर्देशिका में एक स्क्रिप्ट के लिए, "पर" एक नया कमांड विंडो के इस प्रकार का उपयोग कर सेट किया जाएगा:

यहाँ छवि विवरण दर्ज करें


5

मुझे यह पता चलने से पहले एक त्वरित और गंदे तरीके से ऐसा करने का पता चला at

कहो कि आप अपनी स्क्रिप्ट दोपहर में चलाना चाहते हैं:

until [[ "$(date)" =~ "12:00:" ]]; do
    sleep 10
done
./mycommand.sh

कहते हैं कि आप इसे कल दोपहर में चलाना चाहते हैं (आज मेरे लिए 24 नवंबर है):

until [[ "$(date)" =~ "25 12:00:" ]]; do 
    sleep 30
done
./mycommand.sh

अपडेट : थोड़ा बेहतर तरीका: केवल उन नंबरों का परीक्षण करें जिनके बारे में आप ध्यान रखते हैं date +FORMAT:

until [[ $(date +%H:%M) == 21:06 ]]; do
    ...

10
दो लोग हैं, जो इस जवाब upvoted गए हैं करने के लिए, का उपयोग करें at, cronया किसी भी अन्य असली अनुसूचक आवेदन। टास्क शेड्यूलिंग कठिन है, और एक पहिया नहीं जिसे आपको फिर से स्थापित करना चाहिए।
dimo414

1
@ dimo414 मेरी पद्धति में क्या गलत है?
वेजेंड्रिया

8
कम से कम, यह व्यस्त-प्रतीक्षा है, जो बेकार है। इससे भी बदतर, यह सही होने की गारंटी नहीं है; सशर्त छूटने के लिए यह पूरी तरह से संभव है (यदि संभावना नहीं है)। अपने शेड्यूलर को नियमित अभिव्यक्तियों पर आधारित करना भी अत्यधिक त्रुटिपूर्ण है। यह अच्छी तरह से काम कर सकता है , लेकिन इसके कोई फायदे नहीं हैं at
dimo414

(इसके अलावा: मैंने आपके जवाब को
गलत नहीं ठहराया

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