दैनिक क्रोन काम नहीं चल रहा है


10

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

तो मुद्दा यह है कि मैं इसे दैनिक चलाना चाहता हूं, इसलिए मैंने इसे /etc/cron.daily निर्देशिका में लिंक डाल दिया। यहां निर्देशिका की सामग्री दी गई है।

thom@spenser:/etc/cron.daily$ ls -l
total 60
-rwxr-xr-x 1 root root   189 2011-09-14 02:21 apport
-rwxr-xr-x 1 root root 15535 2011-10-06 11:30 apt
-rwxr-xr-x 1 root root   314 2011-08-08 16:57 aptitude
lrwxrwxrwx 1 root root    24 2012-02-28 11:05 backup -> /usr/local/bin/backup.sh
-rwxr-xr-x 1 root root   502 2011-06-08 11:48 bsdmainutils
-rwxr-xr-x 1 root root   256 2011-10-06 04:04 dpkg
-rwxr-xr-x 1 root root   372 2011-10-04 16:50 logrotate
-rwxr-xr-x 1 root root  1353 2011-07-27 07:17 man-db
-rwxr-xr-x 1 root root   606 2011-08-17 09:16 mlocate
-rwxr-xr-x 1 root root   249 2011-06-24 05:36 passwd
-rwxr-xr-x 1 root root  2417 2011-07-01 17:25 popularity-contest
-rwxr-xr-x 1 root root   383 2011-09-30 15:09 samba
-rwxr-xr-x 1 root root  3594 2011-09-19 20:07 standard
thom@spenser:/etc/cron.daily$ 

समस्या यह है कि यह बस कभी नहीं चलता है। यहाँ उस स्क्रिप्ट की अनुमति है:

thom@spenser:/etc/cron.daily$ ls -l /usr/local/bin/backup.sh 
-rwxr-xr-x 1 root root 260 2012-02-28 11:03 /usr/local/bin/backup.sh

विचार?


2
यदि संभव हो, तो कृपया सर्वोत्तम उत्तर (यदि उनके पास एक है) का चयन करके अपने कुछ अन्य खुले प्रश्नों को बंद करने पर विचार करें। हमें उपयोगकर्ताओं को अपने प्रश्नों को बनाए रखने की आवश्यकता है ताकि साइट आपकी समस्याओं वाले अगले व्यक्ति के लिए एक प्रभावी उपकरण बन सके। सर्वोत्तम प्रथाओं के बारे में अधिक जानकारी के लिए प्रश्न पूछने पर अक्सर पूछे जाने वाले प्रश्न पढ़ने पर विचार करें ।
ब्रूनो परेरा

जवाबों:


37

इसकी कोशिश की

run-parts --test /etc/cron.daily

पाया कि मेरी फ़ाइल update.ubuntu नहीं आई। यह भी देखा कि मेरी फ़ाइल में एक एक्सटेंशन था (इसमें डॉट है)।

इसे ठीक करने के लिए कदम।

  1. अद्यतन- ubuntu के लिए मेरा अद्यतन
  2. अब फिर से run-parts --test /etc/cron.daily, इस बार मेरी फाइल आ गई!

1
हाँ, यह मेरे लिए तय है। यह फ़ाइल नाम में डॉट्स को पसंद नहीं करता है, myscript.sh से मेरी फ़ाइल का नाम बदलना मेरे लिए काम किया।
मैट पार्किंस

3
यह अधिक होना चाहिए। मैंने अपनी स्क्रिप्ट को पारंपरिक "backup.sh" के रूप में सहेजा था। ".Sh" भाग को हटाकर इसे हल किया। अनेक अनेक धन्यवाद!
डेविड

धन्यवाद! उस आदमी / लड़की ने, जिसने दैनिक रूप से क्रॉन से .sh फ़ाइलों को हटाने का फैसला किया, उसे शर्मिंदा होना चाहिए!
सिल्वेन

सार्वजनिक रूप से झूठा होना चाहिए! ;-) मुझे आश्चर्य है कि इस निर्णय के कारण लोग सामूहिक रूप से कितना समय गंवाते हैं ... मुझे भी आश्चर्य होता है कि क्या इसका कोई अच्छा कारण था?
xastor

3

कई चीजों में से एक हो सकता है:

रूट पथ:

चलाए जा रहे आदेशों के आधार पर, आपको रूट उपयोगकर्ताओं PATH वैरिएबल का विस्तार करने की आवश्यकता हो सकती है, उनकी क्रॉफ़्ट फ़ाइल के शीर्ष पर निम्न पंक्ति लगाकर:

पथ = / usr / sbin: / usr / bin: / sbin: / bin

src: https://help.ubuntu.com/community/CronHowto

या सिर्फ अपनी स्क्रिप्ट में प्रत्येक आदेश के लिए पूर्ण पथ का उपयोग करें: /bin/lsके बजाय lsउदाहरण के लिए। ( which lsपथों के लिए कमांड लाइन पर)।

यहाँ रिपोर्ट किए गए फ़ाइल नाम में डॉट्स के बारे में एक अजीब बग है । आप जिस फ़ाइल से लिंक कर रहे हैं, उसका विस्तार हो सकता है, हालाँकि यह संभव नहीं लगता है।

क्या आप बैकअप फ़ाइल से आउटपुट को बचा रहे हैं? पहली पंक्ति पर ऐसा कुछ रखें, यह निर्धारित करने में मदद करने के लिए कि यह बिल्कुल नहीं चल रहा है या चल रहा है लेकिन कुछ बिंदु पर विफल हो रहा है।

/bin/echo "Attempting to run backup" >> /path-to-home/backup.log

वैकल्पिक रूप से स्क्रिप्ट को सीधे क्रॉस्टैब फ़ाइल में जोड़ने का प्रयास करें:

sudo -i
crontab -e
[add the next line to the file, then save and exit]
33 15 * * * /usr/local/bin/backup.sh

अगर मशीन चालू है तो हर दिन 15:30 बजे चलेगी। * * * * * का उपयोग करते हुए एक मिनट में एक बार चलाने के लिए परीक्षण जब तक आप इसे काम कर रहे हैं।


1
लिपियों में निरपेक्ष रास्तों का उपयोग करना हतोत्साहित करता है। यदि आपको नहीं पता कि PATH क्या है, तो इसे स्क्रिप्ट में सेट करें। कारण
कोंट्रेब

उपयोगी लिंक, धन्यवाद। पूर्ण पथ का उपयोग नहीं करने का दिया गया कारण पोर्टेबिलिटी है। काफी उचित। एक और उचित समाधान स्क्रिप्ट के प्रारंभ में आपके द्वारा उपयोग किए जा रहे कमांड को परिभाषित करने के साथ-साथ अन्य कॉन्फ़िगरेशन है: एलएस = / बिन / एलएस; SRC_DIR = / घर / जो / src। फिर $ LS $ SRC_DIR का उपयोग करें। शीर्ष पर और एक जगह पर परिभाषित सब कुछ रखता है।
सीन

मुझे लगता है कि पठनीयता को कम करने के लिए, और आपको हर नई प्रणाली के लिए प्रत्येक COMMAND = / path / to / कमांड पर जाना होगा। एक सिस्टम पर, आपके लिए आवश्यक सभी कमांड / usr / bin हो सकते हैं, दूसरे पर कुछ / बिन, दूसरों में / usr / बिन में हैं। PATH में बस दोनों / usr / bin और / bin होने से एक गैर-मुद्दा बनता है। एक साइड नोट पर, चर नाम को कम किया जाना चाहिए, अन्यथा आप विशेष शेल चर या पर्यावरण चर को ओवरराइड करने का जोखिम उठाते हैं।
जिरह

पुन: ऊपरी मामला चर नाम। मैंने हमेशा ऐसा किया है कि बिना ज्यादा सोचे-समझे, पहली स्क्रिप्ट के कारण मैंने ऐसा करते हुए देखा। लेकिन आप सही हैं, कोई उल्टा नहीं है और नकारात्मक पक्ष का मौका है। यह इंगित करने के लिए धन्यवाद, अब इस आदत को तोड़ना चाहिए।
सीन

1

संदेशों के लिए अपना syslog ग्रीप करें जैसे;

crond: (*system*) BAD FILE MODE

फ़ाइलों को 644 पर (पर्याप्त) सीमित करने की आवश्यकता है:

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