मेरे क्रेस्टब ने ट्रिगर क्यों नहीं किया?


29

मैं crontab -eअपने कॉन्ट्राब में निम्न पंक्ति जोड़ता था:

* * * * * echo hi >> /home/myusername/test

फिर भी, मैं नहीं देखता कि परीक्षण फ़ाइल को लिखा गया है। क्या यह अनुमति की समस्या है, या सही ढंग से काम नहीं कर रहा है?

मैं देखता हूं कि क्रोन प्रक्रिया चल रही है। मैं यह कैसे डिबग कर सकता हूं?

संपादित करें - पूछो उबंटू के पास क्रॉस्टैब के बारे में एक अच्छा सवाल है , दुर्भाग्य से यह अभी भी मेरी मदद नहीं करता है।

2 संपादित करें - हम्म, ऐसा लगता है कि मेरी परीक्षण फ़ाइल में 214 लाइनें हैं, जिसका अर्थ है कि पिछले 214 मिनटों के लिए इसे हर मिनट लिखा गया है। मुझे यकीन नहीं है कि समस्या क्या थी, लेकिन यह स्पष्ट रूप से चला गया है।

जवाबों:


23

के कार्यान्वयन हैं cron(उनमें से सभी नहीं हैं, और मुझे याद नहीं है कि कौन सा अपमान है, लेकिन मैंने लिनक्स के तहत एक का सामना किया है) जो हर मिनट में अपडेट किए गए क्रॉस्टैब फ़ाइलों की जांच करते हैं, और अगले मिनट तक नई प्रविष्टियों पर विचार नहीं करते हैं। । इसलिए, एक क्रॉस्टैब को पहली बार आग लगाने में दो मिनट लग सकते हैं। यह वही हो सकता है जिसे आपने देखा है।


1
मुझे लगता है सोलारिस, या शायद जल्दी सोलारिस। मुझे भविष्य में क्रोन एंट्री को 3-5 मिनट चलाने की आदत है जब मैं एक क्रॉस्टैब एंट्री से स्क्रिप्ट का परीक्षण करता हूं, क्योंकि मैं हर समय इस व्यवहार से मूर्ख बन जाता था।
ब्रूस एडगर

fcronयह भी करता है।
फन्नेहे

क्या होगा अगर "चेक" रूटीन की लागत कुछ मिनट से अधिक हो? इस लंबे "चेक" के दौरान क्रोनजर्स को ट्रिगर किया जाना चाहिए जिन्हें ट्रिगर नहीं किया गया था।
ospider

@ospider चेक केवल एक सेकंड का एक अंश लेता है।
गिल्स एसओ- बुराई को रोकना '

28

क्या आपने अपने क्रोनजोब के बाद एक खाली रेखा जोड़ी है ?


मेरे क्रोनजोब के बाद एक खाली रेखा है।
ripper234

4
एक खाली लाइन नहीं, बल्कि अंतिम पंक्ति के अंत में एक नई रेखा। एक टेक्स्ट फ़ाइल को एक अनुक्रम रेखा से युक्त होना चाहिए, प्रत्येक को एक नई पंक्ति द्वारा समाप्त किया जाता है, इसलिए कोई भी गैर-रिक्त पाठ फ़ाइल एक नई पंक्ति के साथ समाप्त होती है। कुछ उपयोगिताओं एक फ़ाइल में अंतिम newline के बाद कुछ भी प्रक्रिया नहीं है।
गिल्स एसओ- बुराई को रोकना '

1
यह शब्दों का प्रश्न है, "न्यूलाइन कैरेक्टर" का अर्थ है "इस कैरेक्टर के शुरू होने के बाद टेक्स्ट की नई लाइन"। तो अंतिम न्यूलाइन और ईओएफ के बीच 0 बाइट्स को एक खाली लाइन के रूप में भी माना जा सकता है ("लाइन जिसमें 0 वर्ण हैं")
जेलरन

10

मेरे पास एक ही समस्या थी - अंत में एक नई प्रविष्टि जोड़ने के बाद एक काम करने वाला क्रॉस्टैब अचानक बंद हो गया। यह पता चला कि मैं उस आखिरी लाइन के बाद एक नई लाइन डालना भूल गया था।

मुझे आदेश जारी करके पता चला

cat /var/log/syslog | grep crontab

और आउटपुट ने समस्या बताई:

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

नई लाइन जोड़ने और बचत से समस्या ठीक हो गई।


5

इस तरह लगता है तय है। अगली बार, STDERR को भी लॉग इन करने का प्रयास करें। निम्नलिखित केवल STDOUT में प्रवेश करेगा, न कि STDERR:

* * * * * echo hi >> /home/myusername/test

यह सुनिश्चित करने की कोशिश करें कि एसटीडीआरआर के लिए भी एक स्पष्ट क्लॉज है। अन्यथा, STDERR को उपयोगकर्ता को ईमेल के माध्यम से भेजा जा सकता है (यह मानते हुए कि ईमेल काम कर रहा है) या कहीं भी नहीं जा सकता है, यह निर्भर करता है कि Cron कैसे कॉन्फ़िगर किया गया है।

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

मेरी प्राथमिकता क्रोनजोब आउटपुट को सिसलॉग में भेजना है। इस तरह मैं किसी भी मौजूदा syslog अवसंरचना (केंद्रीकृत syslogs, Splunk, लॉग रोटेशन का पहले से ही समर्थन कर रहा हूँ, का लाभ ले रहा हूँ, यह / var / log / संदेश और / var / log / cronjob, आदि में संदेशों की तुलना करना आसान है, और मैं नहीं हूँ अनावश्यक ईमेल के साथ sysadmins (मुझे) स्पैमिंग।

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob

2

मेरे साथ समस्या यह थी कि स्क्रिप्ट निष्पादन योग्य नहीं थी। मैं इस तरह crontab -e सेटअप था

* * * * * /bin/my-script.sh

और फ़ाइल myscript निष्पादन योग्य नहीं थी इसलिए मैं भाग गया

chmod +x my-script.sh

तुरंत मैंने उम्मीद के मुताबिक आउटपुट देखना शुरू कर दिया।


1

जब मैं बदल आपका क्रॉन लाइन अपने कंप्यूटर पर ठीक काम करता है myusernaeके लिए phunehehe। आपके सिस्टम में क्या गलत है, यह पता लगाने के कई तरीके हैं।

क्रोन आमतौर पर कुछ गलत होने पर उपयोगकर्ता को मेल भेजते हैं। यदि आप अपने इनबॉक्स की जांच के लिए "आप मेल है" संदेश देखते हैं, तो मेल क्लाइंट का उपयोग करें । या, अपने घर निर्देशिका में जाँच करें, वहाँ एक फ़ाइल नाम हो सकता है dead.letter

आप /var/log/क्रोन से संबंधित प्रविष्टियों की जांच कर सकते हैं । मेरे कंप्यूटर पर लॉग फाइल चालू है /var/log/cron/current(रूट एक्सेस की आवश्यकता है)।

यदि आपके पास रूट एक्सेस है, तो आप क्रोन डेमॉन को रोक सकते हैं और इसे डीबग मोड में शुरू कर सकते हैं। उदाहरण के लिए मैं उपयोग करूँगा ( fcronआपके डेमन के नाम में परिवर्तन ):

killall fcron
fcron --foreground --debug

मुझे अपने डेमॉन का नाम कैसे पता चलेगा?
ripper234

@ ripper234 का उपयोग करें ps -ef | grep cronऔर आपको अपने क्रोन के लिए एक लाइन देखनी चाहिए। डीबग के लिए ध्वज देखने के लिए क्रोन के मैन पेज की जाँच करें। यह संभावना है कि आप विक्सी क्रोन का उपयोग कर रहे हैं , उस स्थिति में डिबग ध्वज है -x। क्रोन प्रक्रिया को मारें और इसे अतिरिक्त ध्वज के साथ फिर से शुरू करें।
फ्यूनहे

इसके अलावा / var / log / syslog की जांच करें। मेरे मामले में, चेतावनी थी कि क्रोन फ़ाइल समूह-लेखन योग्य थी।
अपने मॉड का अच्छी तरह से इलाज करें

1

सबसे अधिक संभावना है, जब क्रोन विफल हो जाता है, तो यह उस कंप्यूटर पर क्रोन नौकरी के उपयोगकर्ता आईडी के लिए एक ईमेल उत्पन्न करता है। यदि आपके कंप्यूटर पर MTA काम नहीं कर रहा है, या आप उस मेल को कहीं और पढ़ या अग्रेषित नहीं कर रहे हैं, तो आप उस संदेश को नहीं देख पाएंगे, भले ही MTA काम कर रहा हो।

मेल के माध्यम से अपने crontab की त्रुटियों को प्राप्त करने का एक अच्छा तरीका यह है कि आप अपने crontab को इस तरह देखें:

MAILTO="myemail@example.com"
* * * * * echo hi >> /home/myusernae/test

जाहिर है, myemail@example.com के बजाय अपने ईमेल पते का उपयोग करें। यह क्रोन को स्थानीय खाते के बजाय आपके ईमेल पते पर त्रुटियां भेजने के लिए कहता है। विशेष रूप से, यह तब उपयोगी होता है जब आपके पास रूट क्रैटाब (या /etc/cron.d में crontab टुकड़ा) होता है, जिसे आप सिर्फ आउटपुट भेजना चाहते हैं, आप रूट के मेलबॉक्स या रूट के फॉरवर्डिंग पते से बच सकते हैं।


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

1

मुझे लगता है कि इसका एक कारण यह हो सकता है कि / home / निर्देशिका एन्क्रिप्ट किया गया है और जब उपयोगकर्ता लॉग आउट हो जाता है तो क्रोन उस निर्देशिका में कुछ भी करने में असमर्थ होता है।

देखें: https://stackoverflow.com/a/40354269/1279002

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