स्क्रिप्ट से क्रोन में लाइनें जोड़ें


40

क्या स्क्रिप्ट के माध्यम से उपयोगकर्ता के क्रोन पर लाइनें जोड़ने का कोई तरीका है?

मैं आमतौर पर इसका उपयोग करता हूं crontab -e, लेकिन मैं इस कार्य को एक शेल स्क्रिप्ट के साथ स्वचालित करना चाहूंगा।


जवाबों:


49

आप वर्तमान उपयोगकर्ताओं को इस तरह से crontab के निचले भाग में पंक्ति को प्रतिध्वनित कर सकते हैं:

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -

+1 cuz आपने मुझे इसे हराया (परीक्षण करते समय मेरे पास एक स्क्रिप्ट त्रुटि थी: D)। 1 चीज़ आपको जोड़ने की ज़रूरत है मुझे लगता है: सिस्टम को सूचित करने की आवश्यकता है cronजिसे बदल दिया गया था।
रिनजविंड

मुझे पता था कि यह उत्तर पाने की दौड़ होगी! आप सही हैं कि क्रोन को सूचित करने की आवश्यकता है। यही कारण है कि आप केवल क्रॉस्टैब के अंत तक कमांड को गूंज नहीं सकते हैं। मैंने परीक्षण किया है कि उपरोक्त स्क्रिप्ट काम करती है और क्रोन कमांड चलाना शुरू कर देता है।
रिचर्ड होलोवे

13
ओह और मुझे लगता है कि यह भी त्रुटि है crontabकि अगर उस उपयोगकर्ता के लिए अभी तक मौजूद नहीं है (?)
Rinzwind

7
यह आपको चेतावनी देता है कि उपयोगकर्ता क्रॉस्टैब मौजूद नहीं है, यदि यह मामला है, लेकिन यह तब इसे बनाएगा। मैं आपकी टिप्पणियों को असंवेदनशील करार दे रहा हूं।
रिचर्ड होलोवे

3

यदि आप अपने क्रेस्टैब में कोई मान संपादित करना चाहते हैं, तो आप निम्न के साथ कुछ कर सकते हैं:

$ crontab -l | sed -e 's/foo/bar/' | crontab -

स्पष्ट रूप से आपको अपने प्रतिस्थापन के साथ सावधान रहने की आवश्यकता है यह सुनिश्चित करने के लिए कि यह केवल उस रेखा से मेल खाता है जिसे आप बदलना चाहते हैं; अन्यथा सभी foosको barsइस उदाहरण में बदल दिया गया है ।

इस पद्धति का लाभ यह है कि आप पूरे कॉन्टैब की जगह नहीं ले रहे हैं। (एक स्लेजहेमर के बजाय एक रूपक चिमटी।)

आप sed के बजाय किसी भी एडिटिंग कमांड का उपयोग कर सकते हैं । उदाहरण के लिए, यदि आप एक पंक्ति को छूने के लिए एड का उपयोग करना चाहते हैं जो इस तरह दिखना शुरू करता है:

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1

कहें कि यह लाइन कई लाइनों में से है या आपके पास अलग-अलग सिस्टम पर अपडेट करने के लिए कई अलग-अलग crontabs हैं और आप केवल यह जानते हैं कि आपकी लाइन उस शब्द के साथ एकमात्र लाइन होने जा रही flitchहै।

ऐसा लग सकता है:

$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...

अब मुझे यह स्वीकार करना चाहिए कि लगभग 100% समय सेड वही करेगा जो एड करेगा, लेकिन स्विस सेना के चाकू पर एक अतिरिक्त टूल रखना हमेशा अच्छा होता है। ^। ^

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