Crontab स्क्रिप्ट काम क्यों नहीं कर रही हैं?


525

अक्सर, crontabस्क्रिप्ट को शेड्यूल या अपेक्षा के अनुसार निष्पादित नहीं किया जाता है। इसके कई कारण हैं:

  1. गलत crontab संकेतन
  2. अनुमतियाँ समस्या
  3. पर्यावरण चर

इस समुदाय विकि का उद्देश्य crontabलिपियों के शीर्ष कारणों को उम्मीद के मुताबिक निष्पादित नहीं करना है। प्रत्येक कारण को अलग उत्तर में लिखें।

कृपया प्रति उत्तर में एक कारण शामिल करें - उस एक कारण के बारे में विवरण - क्यों निष्पादित नहीं किया गया है - और इसे ठीक करें।

कृपया केवल क्रोन-विशिष्ट मुद्दों को लिखें, जैसे कि कमांड जो शेल से अपेक्षित रूप से निष्पादित होती है लेकिन क्रोन द्वारा गलत तरीके से निष्पादित होती है।


12
crontab -eप्रभावित करने के लिए आपको क्रोन के करीब होना चाहिए । उदाहरण के लिए vim का उपयोग करके मैं फ़ाइल को संपादित करता हूं और :wइसे लिखने के लिए उपयोग करता हूं लेकिन नौकरी छोड़ने तक क्रोन में नहीं जोड़ा जाता है। इसलिए मैं नौकरी नहीं देखूंगा जब तक कि मैं :qभी नहीं करूंगा ।
डटग्रिफ

मुझे लगता है कि क्रोन को डिबग करने का सबसे अच्छा तरीका है कि आप सिसलॉग की जांच करें और समस्याओं को खोजें।
सुनील कुमार

मेरे मामले में - ईमेल मेरे SPAM फ़ोल्डर में जा रहा था, इसलिए ..... जाँच करें कि इससे पहले कि आप डिबगिंग पर घंटों बिताएँ: D
almaruf 6'17

बिजली आउटेज
जोसेफ क्लिमुक

जवाबों:


501

अलग वातावरण

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

* * * * * env> /tmp/env.output

/tmp/env.outputबनने की प्रतीक्षा करें , फिर नौकरी निकालें। अब अपने नियमित टर्मिनल में रन /tmp/env.outputके आउटपुट के साथ सामग्री की तुलना करें env

एक सामान्य "गोच" यहां PATHपर्यावरण चर भिन्न है। हो सकता है कि आपके क्रॉन स्क्रिप्ट आदेश का उपयोग करता है somecommandमें पाया /opt/someApp/binहै जो आप करने के लिए जोड़ दिया है, PATHमें /etc/environment? क्रोन PATHउस फ़ाइल से अनदेखा करता है, इसलिए somecommandक्रोन के साथ चलने पर आपकी स्क्रिप्ट से रनिंग विफल हो जाएगी, लेकिन टर्मिनल में चलने पर काम करें। यह ध्यान देने योग्य है कि चर से /etc/environmentक्रोन नौकरियों पर पारित किया जाएगा, न केवल चर क्रोन विशेष रूप से खुद को सेट करता है, जैसे कि PATH

उसके चारों ओर जाने के लिए, बस PATHस्क्रिप्ट के शीर्ष पर अपना स्वयं का चर निर्धारित करें । उदाहरण के लिए

#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# rest of script follows

कुछ बजाय सभी आदेशों के लिए निरपेक्ष पथ का उपयोग करना पसंद करते हैं। मैं उसके खिलाफ सलाह देता हूं। इस बात पर विचार करें कि यदि आप अपनी स्क्रिप्ट को किसी अन्य सिस्टम पर और उस सिस्टम पर चलाना चाहते हैं, तो /opt/someAppv2.2/binइसके बजाय कमांड है । आप पूरी स्क्रिप्ट की जगह के माध्यम से जाना होगा /opt/someApp/binके साथ /opt/someAppv2.2/binबजाय सिर्फ स्क्रिप्ट की पहली पंक्ति पर एक छोटे से संपादित करने का।

आप Crontab फ़ाइल में PATH चर भी सेट कर सकते हैं, जो सभी क्रोन नौकरियों पर लागू होगा। उदाहरण के लिए

PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

15 1 * * * backupscript --incremental /home /root

5
मुझे लगता है कि मैं बस इसके लिए गिर गया, और अंत में newline ... डबल whammy।
वर्नरसीडी

6
+1 के लिए env, मैं पूरी तरह से उस कमांड के बारे में भूल गया था और सोचा था कि PATH काम कर रहा है। यह मेरे मामले में वास्तव में अलग था।
इज़्काता

8
@pbr यदि ऐसी निर्देशिकाओं को दूसरों के लिए छोड़ दिया जाता है, तो सिस्टम पहले से ही समझौता है।
जिरह

6
@pbr एक sysadmin रूट फाइल सिस्टम को अनजाने में हटा सकता है। आप मूर्खतापूर्ण गलतियों को करने वाले sysadmins के खिलाफ रक्षा नहीं कर सकते। यदि आप एक दुभाषिया का नया संस्करण स्थापित करते हैं जो पीछे की ओर संगत नहीं है, तो मुझे इसकी परवाह किए बिना टूटने की उम्मीद होगी। संभाल करने के लिए एक अलग तरीका है कि इसे एक अलग कमांड के रूप में स्थापित करना है। जैसे आपके पास अजगर संस्करण 2.x है और अजगर 3 स्थापित करें, आप इसे अजगर 3 के रूप में स्थापित करते हैं, अजगर के रूप में नहीं। और के रूप में / ऑप्ट / someApp / बिन के लिए, पृथ्वी पर क्यों यह समझदार अनुमति / स्वामित्व नहीं होगा? कोई भी sane admin सिस्टम फाइलों पर sane अनुमतियाँ / स्वामित्व सुनिश्चित करेगा।
जिरह

2
@pbr ऐसा लगता है कि हम हमेशा के लिए जा सकते हैं, हाँ। मैं अभी भी यह देखने में विफल हूं कि PATH का उपयोग करना एक बुरा विचार क्यों है। यदि आपको लगता है कि चर्चा के लिए एक और बेहतर माध्यम में इस पर चर्चा करना बेहतर है, तो आप मुझे #ubuntu और #bash, अन्य चैनलों के बीच, irc.freenode.net पर
geirha

336

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

नीचे इस मुद्दे के लिए आदमी पृष्ठों में प्रासंगिक अनुभाग है ( man crontabफिर अंत तक छोड़ें):

   Although cron requires that each entry in a crontab end  in  a  newline
   character,  neither the crontab command nor the cron daemon will detect
   this error. Instead, the crontab will appear to load normally. However,
   the  command  will  never  run.  The best choice is to ensure that your
   crontab has a blank line at the end.

   4th Berkeley Distribution      29 December 1993               CRONTAB(1)

91
यह एक शोस्टॉपर है, यह कैसे आया है कि यह इतने वर्षों के क्रोन में तय नहीं किया गया है?
कैपी एथरिएल

2
विक्सी क्रोन में तय होने लगता है: man crontabउबंटू 10.10 पर कहता है "क्रोन को आवश्यकता होती है कि क्राउन्ट में प्रत्येक प्रविष्टि एक नई लाइन वर्ण में समाप्त होती है। यदि कॉन्टैब में अंतिम प्रविष्टि न्यूलाइन को याद कर रही है, तो क्रोन क्रॉस्टैब (कम से कम आंशिक रूप से) पर विचार करेगा। और इसे स्थापित करने से मना करें। " (और अंतिम तिथि 19 अप्रैल 2010 है।)
मारियस गेदमिनस

19
@barrapanto यह वास्तव में नए टेक्स्ट संपादकों में एक बग है। "न्यूलाइन" कैरेक्टर को एक लाइन टर्मिनेशन कैरेक्टर माना जाता है , इसलिए टेक्स्ट फाइल में अंतिम लाइन को न्यूलाइन कैरेक्टर में समाप्त होना चाहिए, जो एडिटर में नहीं दिखाया जाता है। वीआईएम और वीआईएम चरित्र का सही उपयोग करते हैं, और क्रोन का निर्माण नए संपादकों द्वारा उनके अजीब व्यवहार शुरू करने से पहले किया गया था ... इसलिए इसे सहेजना और एक रिक्त लाइन सहित खेलना।
इज़्काता

6
यदि आप crontab का उपयोग करते हैं, तो crontab -eइसे सहेजने की अनुमति देने से पहले फ़ाइल के सिंटैक्स की जांच करेंगे, जिसमें न्यूलाइन के लिए चेक भी शामिल है।
टॉम हैरिसन जूनियर

2
@ चैन-होसुह, मैन पेज के अनुसार "क्रोन की आवश्यकता होती है कि एक क्राउन में एक एंट्री एक न्यूलाइन कैरेक्टर में समाप्त होती है। यदि कॉन्टैब में आखिरी एंट्री न्यूलाइन को याद कर रही है, तो क्रोन कॉट्रैब (कम से कम आंशिक रूप से) को टूट जाएगा और मना कर देगा। इसे स्थापित करो।" यह व्यवहार तब संपादित किया जाएगा जब संपादन -eविकल्प का उपयोग करके crontab को सहेज रहा है , और संपादक से स्वतंत्र है।
टॉम हैरिसन जूनियर

139

क्रोन डेमॉन नहीं चल रहा है। मैं वास्तव में कुछ महीने पहले इसके साथ खराब हो गया था।

प्रकार:

pgrep cron 

यदि आप कोई संख्या नहीं देखते हैं, तो क्रोन नहीं चल रहा है। sudo /etc/init.d/cron startक्रोन शुरू करने के लिए इस्तेमाल किया जा सकता है।

संपादित करें: /etc/init.d के माध्यम से इनिट स्क्रिप्ट को लागू करने के बजाय, सेवा उपयोगिता का उपयोग करें, जैसे

sudo service cron start

संपादित करें: इसके अलावा आप आधुनिक लिनक्स में सिस्टमक्टेल का उपयोग कर सकते हैं, जैसे

sudo systemctl start cron

47
मुझे pgrep दिखाने के लिए धन्यवाद। मैं ps -ef करता रहा | grep फू
ripper234

4
आप pidof cronअन्य अनुप्रयोगों के लिए परिणाम भी छोड़ देंगे जिनका उपयोग क्रोनब की तरह 'क्रोन' शब्द के लिए किया जाएगा।
पिथिकोस

अजीब, ये सभी मुझे कुछ भी नहीं दिखाते हैं कि क्रोन चल रहा है, लेकिन अगर मैं दौड़ता sudo service cron startहूं तोstart: Job is already running: cron
कोलीन

1
service crond startयदि इसका केंद्र / आरएचईएल
श्रीहरि कारंथ १17 ’

91

लिपि में बदल दें cron.d/, cron.daily/, cron.hourly/, आदि, बिंदु (शामिल नहीं होना चाहिए .), अन्यथा रन भागों उन्हें छोड़ देगा।

रन-पार्ट्स देखें (8):

   If neither the --lsbsysinit option nor the --regex option is given then
   the names must consist entirely of upper and lower case  letters,  dig‐
   its, underscores, and hyphens.

   If  the  --lsbsysinit  option  is given, then the names must not end in
   .dpkg-old  or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong  to
   one  or more of the following namespaces: the LANANA-assigned namespace
   (^[a-z0-9]+$);   the   LSB   hierarchical   and   reserved   namespaces
   (^_?([a-z0-9_.]+-)+[a-z0-9]+$);  and  the  Debian cron script namespace
   (^[a-zA-Z0-9_-]+$).

इसलिए, यदि आप एक क्रॉन स्क्रिप्ट है backup.sh, analyze-logs.plमें cron.daily/निर्देशिका, आप सबसे अच्छा चाहते विस्तार के नाम हटाने के लिए।


10
यह एक बग नहीं है एक विशेषता है - यह myscript.backup या myscript.original या myscript.rpm जैसी चीजों को रखता है- myscript के ठीक बगल में चलने से।
pbr

@pbr: समझ में आता है। कम से कम यह डिबगिंग के लिए मददगार होता अगर run-parts --test(या कोई अन्य काल्पनिक विकल्प जैसे --debugफाइलों को इसके कारण
बताए

8
यदि यह एक विशेषता है, तो यह एक अच्छा नहीं है :( बहुत सारे लोग फ़ाइल नाम में डॉट का उपयोग करते हैं (backup.sh सबसे आम है)। यदि आप स्क्रिप्ट को निष्पादित करना बंद करना चाहते हैं, तो सबसे तार्किक विधि होगी। इसे "cron.d" निर्देशिका से हटा दें।
MatuDuke

7
यह ऐसी खराब विशेषता है कि यह प्रभावी रूप से बग है। किसी विशेष अंत (जैसे "। लिस्ट" या ".क्रोन" या कुछ और) की आवश्यकता के लिए यह आम बात है कि अगर लोग यह सुनिश्चित करना चाहते हैं कि चीजें केवल तब ही चलती हैं जब वे इच्छित हों। ".Bak" या ".temp" या जो भी हो, के लिए एक संभावित विभाजक के रूप में मनमाने ढंग से डॉट को चुनना, इस तरह को छोड़कर पूरी तरह से अप्रत्याशित है कि यह लोगों को अनुमानित रूप से भ्रमित करेगा। ".Sh", और ".pl" जैसे वैध अंत दशकों के लिए व्यापक उपयोग में हैं। हालाँकि, बहुत से लोग डॉट के बजाय "_bak" या "_temp" या "-bak" का उपयोग करते हैं। यह एक भयानक डिजाइन विकल्प है; यह सबसे अच्छा एक डिजाइन बग है।
तेईकिन

68

कई वातावरणों में क्रोन कमांड का उपयोग shकरते हुए निष्पादित होता है , जबकि कई लोग यह मानते हैं कि यह उपयोग करेगा bash

असफल आदेश के लिए इसका परीक्षण करने या ठीक करने के सुझाव:

  • shयह देखने के लिए कि क्या यह काम करता है कमांड चलाने की कोशिश करें :

    sh -c "mycommand"
    
  • यह सुनिश्चित करें कि यह बैश में चला जाए, यह सुनिश्चित करने के लिए कमांड को बैश उपखंड में लपेटें:

    bash -c "mybashcommand"
    
  • अपने क्रॉन्स्टब के शीर्ष पर शेल को सेट करके बैश में सभी कमांड चलाने के लिए क्रोन को बताएं:

    SHELL=/bin/bash
    
  • यदि कमांड एक स्क्रिप्ट है, तो सुनिश्चित करें कि स्क्रिप्ट में एक शेबंग है:

    #!/bin/bash
    

बैश सुझाव मेरे क्रोन के साथ बहुत उपयोगी, निश्चित मुद्दा है।
मैक्सिम गलुश्का

यह सिर्फ मुझे 1 fiddling / समस्या निवारण का कारण बना। यदि आप इस मुद्दे से अवगत नहीं हैं तो और भी अधिक हैरान करने वाली बात यह है कि यदि आप विशिष्ट शेल हैं तो स्क्रिप्ट मैन्युअल रूप से ठीक चलेगी bash, लेकिन इसके साथ नहीं cron। धन्यवाद!
हेंडी

एक लंबे समय से पहले मैं कुछ संबंधित में भाग गया: कमान में sourceहै, लेकिन श नहीं। क्रोन / श में, एक अवधि का उपयोग करें: . envfileइसके बजाय source envfile
कुंगफू

@Clockwork एक स्क्रिप्ट फ़ाइल के रूप में mycommand चलाने के लिए sh "mycommand"कहता shहै। क्या आपका मतलब था sh -c "mycommand"? किसी भी दर पर, यह उत्तर विशेष रूप से कमांड को बैश में बनाने के बारे में प्रतीत होता है, तो आपने shयहां के लिए कमांड क्यों जोड़ा ?
ओलरिन

@ ऑरलिन मेरी समझ से, पहले बिंदु का उद्देश्य श के साथ इसे चलाना और चलाना था, यह देखने के लिए कि क्या समस्या वास्तव में इस तथ्य से आई है कि क्रॉन बैश के बजाय श के साथ चल रहा है। तो फिर, मुझे मामले के बारे में कम जानकारी है, इसलिए मैं गलत हो सकता हूं।
घड़ी की कल

39

समय क्षेत्र के साथ मेरे कुछ मुद्दे थे। क्रोन ताजा स्थापना समय क्षेत्र के साथ चल रहा था। समाधान क्रोन को फिर से शुरू करना था:

sudo service cron restart

6
हां, एक सिस्टम पर टाइमज़ोन बदलने के बाद, किसी को हर उस सेवा को फिर से शुरू करना होगा जो इस बात की परवाह करती है कि वह किस समय है, या रिबूट करें। मैं रिबूट को पसंद करता हूं, यह सुनिश्चित करने के लिए कि मैंने सब कुछ पकड़ लिया है।
pbr

हे भगवान के लिए, इस पर घंटे मारे गए। * * * * * touch /tmp/cronworksकुछ भी नहीं करने के बाद फिर से शुरू की गई सेवा , अभी तक RELOADक्रोनलॉग पर है।
НЛО

36

लिपियों के लिए निरपेक्ष पथ का उपयोग किया जाना चाहिए:

उदाहरण के लिए, के /bin/grepबजाय इस्तेमाल किया जाना चाहिए grep:

# m h  dom mon dow   command
0 0 *  *  *  /bin/grep ERROR /home/adam/run.log &> /tmp/errors

के बजाय:

# m h  dom mon dow   command
0 0 *  *  *  grep ERROR /home/adam/run.log &> /tmp/errors

यह विशेष रूप से मुश्किल है, क्योंकि शेल से निष्पादित होने पर एक ही कमांड काम करेगा। कारण यह है कि उपयोगकर्ता cronके समान PATHपर्यावरण चर नहीं है ।


3
जिरहा का जवाब देखें, आप क्रोन के
पेट

9
Bzzt। आपको पथ को परिभाषित करने की आवश्यकता नहीं है - पूर्ण पथ का उपयोग करना यहां सबसे अच्छा अभ्यास है। "क्योंकि एक निष्पादन योग्य किसी अन्य कंप्यूटर पर कहीं और हो सकता है" ट्रम्प नहीं करता है "मैं चाहता हूं कि यह बिल्कुल इस कार्यक्रम को चलाए और न कि किसी अन्य ने मेरे मूल कार्यक्रम के सामने रखा"
pbr

1
हाँ, यह मेरे लिए था, क्रोन के बाहर मैं सीधे कमांड चला सकता था, क्रोन के अंदर इसे पूर्ण /usr/bin/whateverपथ की आवश्यकता थी
एंथ्रोपिक

32

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

वह और अन्य अच्छे गोटेक यहाँ:
http://www.pantz.org/software/cron/croninfo.html


यह वह है जो पिछले सप्ताह के लिए मेरी क्रोन नौकरी को विफल कर रहा है। अंत में पता चला कि मेरी तिथि में कोई भागने वाला चरित्र नहीं था (किसी भी अन्य लोगों के लिए बैकस्लैश जो भागने वाले चरित्र की तलाश में है)। वाह!
वलियन ऑक्ट


25

क्रोन एक स्क्रिप्ट को बुला रहा है जो निष्पादन योग्य नहीं है।

chmod +x /path/to/scripस्क्रिप्ट चलाने से निष्पादन योग्य हो जाता है और इस समस्या को हल करना चाहिए।


5
यह cronकेवल /path/to/scriptकमांड लाइन से निष्पादित करने की कोशिश करके अद्वितीय और आसानी से पता लगाने योग्य नहीं है ।
एडम मटन

4
आप के साथ स्क्रिप्ट का निष्पादन करने के लिए इस्तेमाल कर रहे हैं . scriptnameया sh scriptnameया bash scriptnameहै, तो यह एक हो जाता है cronविशिष्ट समस्या।
एलिया कगन

24

यह भी संभव है कि उपयोगकर्ता का पासवर्ड समाप्त हो गया हो। यहां तक ​​कि रूट का पासवर्ड भी समाप्त हो सकता है। आप कर सकते हैं tail -f /var/log/cron.logऔर आप समाप्त हो चुके पासवर्ड के साथ क्रोन को देखेंगे। आप ऐसा करने के लिए कभी भी समाप्त नहीं होने वाला पासवर्ड सेट कर सकते हैं:passwd -x -1 <username>

कुछ प्रणालियों में (डेबियन, उबंटू) क्रोन के लिए लॉगिंग डिफ़ॉल्ट रूप से सक्षम नहीं है। में /etc/rsyslog.conf या /etc/rsyslog.d/50-default.conf लाइन:

# cron.*                          /var/log/cron.log

संपादित किया जाना चाहिए ( sudo nano /etc/rsyslog.conf)

cron.*                          /var/log/cron.log

उसके बाद, आपको rsyslog को फिर से शुरू करना होगा

/etc/init.d/rsyslog restart

या

service rsyslog restart 

स्रोत: डेबियन लिनक्स में crontab लॉगिंग सक्षम करें

कुछ सिस्टम (उबंटू) में क्रोन के लिए अलग लॉगिंग फ़ाइल डिफ़ॉल्ट रूप से सक्षम नहीं है, लेकिन क्रोन संबंधी लॉग्स साइलॉग फाइल में दिखाई दे रहे हैं। एक का उपयोग कर सकते हैं

cat /var/log/syslog | grep cron -i

क्रोन-संबंधित संदेशों को देखने के लिए।


मेरे पास डेबियन (wheezy) है, लेकिन कोई /etc/init.d/rsyslog नहीं है, केवल inetutils-syslogd और sysklogd है। क्या मुझे कुछ स्थापित करना है या दोनों में से किसी एक को पुनः आरंभ करना है?
hgoebl

18

यदि आपका क्रोनजॉब GUI-apps को आमंत्रित करता है, तो आपको उन्हें यह बताने की आवश्यकता है कि उन्हें क्या उपयोग करना चाहिए।

उदाहरण: क्रोन के साथ फ़ायरफ़ॉक्स लॉन्च।

आपकी स्क्रिप्ट में export DISPLAY=:0कहीं होना चाहिए ।


aplay को किसी कारण से इसकी आवश्यकता थी। धन्यवाद
IljaBek

* * * * * export DISPLAY=:0 && <command>
LoMaPh

15

अनुमतियाँ समस्याएं काफी सामान्य हैं, मुझे डर है।

ध्यान दें कि एक आम समाधान रूट के क्रॉस्टैब का उपयोग करके सब कुछ निष्पादित करना है, जो कभी-कभी एक वास्तव में खराब विचार है। उचित अनुमतियाँ सेट करना निश्चित रूप से एक बड़े पैमाने पर अनदेखी मुद्दा है।


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

14

असुरक्षित क्रोन तालिका की अनुमति

यदि इसकी अनुमति असुरक्षित है, तो क्रोन तालिका अस्वीकार कर दी जाती है

sudo service cron restart
grep -i cron /var/log/syslog|tail -2
2013-02-05T03:47:49.283841+01:00 ubuntu cron[49906]: (user) INSECURE MODE (mode 0600 expected) (crontabs/user)

के साथ समस्या हल हो गई है

# correct permission
sudo chmod 600 /var/spool/cron/crontabs/user
# signal crond to reload the file
sudo touch /var/spool/cron/crontabs

पहले मैंने खुद को समझा और फिर मुझे आपका जवाब मिल गया! फिर भी बहुत-बहुत धन्यवाद! मेरे मामले में, मैंने SVN के माध्यम से / var / spool / cron / crontabs में कुछ crontabs को वापस / बहाल कर दिया था जिसने इसकी अनुमति बदल दी थी!
अल्फोंक्स

12

स्क्रिप्ट स्थान-संवेदनशील है। यह हमेशा एक स्क्रिप्ट में निरपेक्ष पथ का उपयोग करने से संबंधित है, लेकिन काफी समान नहीं है। cdदौड़ने से पहले आपकी क्रोन नौकरी के लिए एक विशेष निर्देशिका की आवश्यकता हो सकती है , जैसे रेल एप्लिकेशन पर एक रेक कार्य, सही कार्य को खोजने के लिए रेक के लिए एप्लिकेशन रूट में होना चाहिए, उपयुक्त डेटाबेस कॉन्फ़िगरेशन का उल्लेख नहीं करना, आदि।

तो एक crontab प्रविष्टि

23 3 * * * /usr/bin/rake db:session_purge RAILS_ENV=production

के रूप में बेहतर होगा

23 3 * * * cd / var / www / उत्पादन / वर्तमान और& / usr / बिन / रेक db: session_purge RAILS_ENV = उत्पादन

या, Crontab प्रविष्टि को सरल और कम भंगुर रखने के लिए:

23 3 * * * /home/<user>/scripts/session-purge.sh

निम्नलिखित कोड के साथ /home/<user>/scripts/session-purge.sh:

सीडी / var / www / उत्पादन / वर्तमान
/ usr / bin / rake db: session_purge RAILS_ENV = उत्पादन

1
यदि क्रोन से मंगाई जा रही स्क्रिप्ट को PHP जैसी व्याख्या की गई भाषा में लिखा गया है, तो आपको स्क्रिप्ट में ही कार्यशील निर्देशिका को सेट करना पड़ सकता है। उदाहरण के लिए, PHP में: chdir(dirname(__FILE__));
इवान डोनोवन

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

11

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

क्रोन जॉब स्पेसिफिकेशन फॉर्मेट उपयोगकर्ताओं के कॉन्टैब फाइल्स (/ var / spool / cron / यूजरनेम या / var / spool / cron / crontabs / यूजरनेम) और सिस्टम crontabs ( /etc/crontabऔर फाइलों में /etc/cron.d) के बीच भिन्न होता है ।

सिस्टम क्रॉस्टैब्स के पास कमांड-टू-रन से ठीक पहले एक अतिरिक्त फ़ील्ड 'उपयोगकर्ता' है।

george; command not foundजब आप उपयोगकर्ता की crontab फ़ाइल में किसी कमांड को /etc/crontabया किसी फ़ाइल को बाहर ले जाते हैं, तो यह चीज़ों को /etc/cron.dगलत करने का कारण बनेगी।

इसके विपरीत, क्रोन /usr/bin/restartxyz is not a valid usernameजब रिवर्स होता है, तो इसी तरह की त्रुटियों को वितरित करेगा ।


10

क्रोन स्क्रिप्ट --verbose विकल्प के साथ एक कमांड दे रहा है

मेरे पास एक क्रोन स्क्रिप्ट थी, क्योंकि स्क्रिप्ट टाइप करते समय मैं ऑटोपायलट में था और मैंने --verbose विकल्प को शामिल किया था:

#!/bin/bash
some commands
tar cvfz /my/archive/file.tar.gz /my/shared/directory
come more commands

शेल से निष्पादित करते समय स्क्रिप्ट ठीक चलती थी, लेकिन क्रॉस्टैब से चलने पर विफल रही क्योंकि शेल से चलने पर वर्बोज़ आउटपुट स्टडआउट हो जाता है, लेकिन कहीं भी क्रॉस्टब से नहीं चलता है। 'V' को निकालने के लिए आसान फिक्स:

#!/bin/bash
some commands
tar cfz /my/archive/file.tar.gz /my/shared/directory
some more commands

5
यह क्यों एक विफलता का कारण है? बफर मुद्दों?
एडम मटन

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

10

सबसे लगातार कारण मैंने क्रॉन को गलत तरीके से बताए गए शेड्यूल में विफल देखा है। यह एक नौकरी के रूप में 11:15 बजे के लिए निर्धारित निर्दिष्ट करने के लिए अभ्यास लेता है 15 23 * * *बजाय * * 11 15 *या 11 15 * * *। आधी रात के बाद नौकरियों के लिए सप्ताह का दिन भी उलझन में है एमएफ 2-6आधी रात के बाद है, नहीं 1-5। विशिष्ट तिथियां आमतौर पर एक समस्या हैं क्योंकि हम शायद ही कभी उनका उपयोग करते हैं * * 3 1 *3 मार्च नहीं है। यदि आप निश्चित नहीं हैं, तो https://crontab.guru/ पर अपने क्रोन शेड्यूल को ऑनलाइन देखें

यदि असमर्थित विकल्पों का उपयोग करते हुए विभिन्न प्लेटफार्मों के साथ आपका काम जैसे 2/3समय विनिर्देशों में विफलताएं भी हो सकती हैं। यह एक बहुत ही उपयोगी विकल्प है, लेकिन सार्वभौमिक रूप से उपलब्ध नहीं है। मैं भी इस तरह की सूची के साथ मुद्दों पर चला गया है 1-5या 1,3,5

अयोग्य रास्तों का उपयोग करने से भी समस्याएँ हुई हैं। डिफ़ॉल्ट पथ आमतौर पर है /bin:/usr/binतो केवल मानक कमांड चलेंगे। इन निर्देशिकाओं में आमतौर पर वांछित कमांड नहीं होती है। यह गैर-मानक आदेशों का उपयोग करके स्क्रिप्ट को भी प्रभावित करता है। अन्य पर्यावरण चर भी गायब हो सकते हैं।

मौजूदा क्रॉस्टब को पूरी तरह से तोड़ने से मुझे परेशानी हुई है। मैं अब एक फाइल कॉपी से लोड करता हूं। यह मौजूदा crontab से इस्तेमाल किया जा सकता है crontab -lअगर यह clobbered हो जाता है। मैं crontab की कॉपी ~ / बिन में रखता हूं। यह पूरी टिप्पणी करता है और पंक्ति के साथ समाप्त होता है # EOF। इसे प्रतिदिन एक कोंट्राब प्रविष्टि से पुनः लोड किया जाता है जैसे:

#! / Usr / bin / crontab
# इस कोंट्राब को रीलोड करें
#
54 12 * * * $ {HOME} / bin / crontab

ऊपर पुनः लोड कमांड एक निष्पादन योग्य क्रॉस्टैब पर निर्भर करता है जिसमें बैंग रास्ता चल रहा है। कुछ सिस्टम को कमांड में रनिंग क्रैस्टैब की आवश्यकता होती है और फ़ाइल को निर्दिष्ट करता है। यदि निर्देशिका नेटवर्क-साझा है, तो मैं अक्सर crontab.$(hostname)फ़ाइल के नाम के रूप में उपयोग करता हूं । यह अंततः उन मामलों को सही करेगा जहां गलत सर्वर पर गलत कोंट्राब लोड किया गया है।

फ़ाइल का उपयोग करना एक बैकअप प्रदान करता है कि क्रॉस्टैब क्या होना चाहिए, और अस्थायी संपादन (केवल समय का उपयोग करता है crontab -e) को स्वचालित रूप से बैकअप करने की अनुमति देता है । ऐसे हेडर उपलब्ध हैं जो शेड्यूलिंग मापदंडों को सही होने में मदद करते हैं। मैंने उन्हें जोड़ा है जब अनुभवहीन उपयोगकर्ता एक क्रॉस्टैब का संपादन करेंगे।

शायद ही कभी, मैं उन कमांडों में भाग लेता हूं जिनके लिए उपयोगकर्ता इनपुट की आवश्यकता होती है। Crontab के तहत ये विफल हो जाते हैं, हालांकि कुछ इनपुट पुनर्निर्देशन के साथ काम करेंगे।


3
यह तीन अलग-अलग समस्याओं को कवर करता है। क्या उन्हें अलग-अलग उत्तरों में विभाजित किया जा सकता है?
एलिया कगन

9
क्या आप बता सकते हैं कि 30 23 * * * 11:15 PM पर अनुवाद कैसे होता है ?
येल्टन

@ येल्टन यह स्पष्ट रूप से गलत था, यह होना चाहिए 15 23 * * *। अब ठीक हो गया।
मेलेबियस

7

यदि आप SSH कुंजियों के माध्यम से किसी खाते तक पहुँच प्राप्त कर रहे हैं, तो खाते में प्रवेश करना संभव है, लेकिन यह ध्यान नहीं देना चाहिए कि खाते पर पासवर्ड बंद है (जैसे समाप्त होने या अमान्य पासवर्ड प्रयासों के कारण)

यदि सिस्टम PAM का उपयोग कर रहा है और खाता लॉक हो गया है, तो इसके क्रोनजोब को चलने से रोका जा सकता है। (मैंने सोलारिस पर इसका परीक्षण किया है, लेकिन उबंटू पर नहीं)

आपको इस तरह के संदेश मिल सकते हैं / var / adm / messages:

24 अक्टूबर 07:51:00 मायबॉक्स क्रोन [29024]: [आईडी 731128 ऑर्ट.नोटिस] pam_unix_account: स्थानीय होस्ट से लॉकर अकाउंट वेरर को मान्य करने का प्रयास करने वाला क्रोन
24 अक्टूबर 07:52:00 मायबॉक्स क्रोन [29063]: [आईडी 731128 ऑर्ट.नोटिस] pam_unix_account: स्थानीय होस्ट से लॉकर खाते के सत्यापन को वैध बनाने का प्रयास करने वाला क्रोन
24 अक्टूबर 07:53:00 मायबॉक्स क्रोन [29098]: [आईडी 731128 ऑर्ट.नोटिस] pam_unix_account: स्थानीय होस्ट से लॉकर खाते के सत्यापन को वैध बनाने का प्रयास करने वाला क्रोन
24 अक्टूबर 07:54:00 मायबॉक्स क्रोन [29527]: [आईडी 731128 ऑर्ट.नोटिस] pam_unix_account: स्थानीय होस्ट से लॉकर खाते के सत्यापन को वैध बनाने का प्रयास करने वाला क्रोन

आपको बस इतना करना चाहिए:

# passwd -u <USERNAME>

खाते को अनलॉक करने के लिए रूट के रूप में, और क्रॉस्टैब को फिर से काम करना चाहिए।


7

यदि आपके पास इस तरह से एक कमांड है:

* * * * * /path/to/script >> /tmp/output

और यह काम नहीं करता है और आप किसी भी आउटपुट को नहीं देख सकते हैं, यह जरूरी नहीं है कि क्रोन काम नहीं कर रहा है। स्क्रिप्ट को तोड़ा जा सकता है और आउटपुट को stderr पर जा रहा है जो / tmp / आउटपुट में पास नहीं होता है। इस आउटपुट को कैप्चर करके, यह जाँचें:

* * * * * /path/to/script >> /tmp/output 2>&1

यह देखने के लिए कि क्या यह आपकी समस्या को पकड़ने में आपकी मदद करता है।


3

=== डॉकटर अलर्ट ===

यदि आप docker का उपयोग कर रहे हैं,

मुझे लगता है कि यह जोड़ना उचित है कि मैं पृष्ठभूमि में चलाने के लिए क्रोन बनाने का प्रबंधन नहीं कर सका।

कंटेनर के अंदर एक क्रोन नौकरी चलाने के लिए, मैंने पर्यवेक्षक का उपयोग किया और cron -fअन्य प्रक्रिया के साथ मिलकर भाग गया ।

संपादित करें: एक और मुद्दा - मैं HOST नेटवर्किंग के साथ कंटेनर को चलाते समय इसे काम में लाने का प्रबंधन नहीं करता था। इस मुद्दे को यहाँ भी देखें: https://github.com/phusion/baseimage-docker/issues/144



3

मैं एक इंस्टॉल शेल स्क्रिप्ट लिख रहा था जो एक डेटाबेस से पुराने लेनदेन डेटा को शुद्ध करने के लिए एक और स्क्रिप्ट बनाता है। कार्य के एक भाग के रूप में इसे दैनिक cronकाम को एक मनमाने समय पर चलाने के लिए कॉन्फ़िगर करना था , जब डेटाबेस लोड कम था।

मैंने mycronjobक्रोन शेड्यूल, उपयोगकर्ता नाम और कमांड के साथ एक फ़ाइल बनाई और इसे /etc/cron.dनिर्देशिका में कॉपी किया । मेरे दो गोत्र:

  1. mycronjob फ़ाइल को चलाने के लिए रूट के स्वामित्व में होना चाहिए
  2. मुझे फ़ाइल की अनुमतियाँ 644 पर सेट करनी थीं - 664 नहीं चलेगी।

एक अनुमति समस्या /var/log/syslogकुछ इस तरह दिखाई देगी :

Apr 24 18:30:01 ip-11-22-33-44 cron[40980]: (*system*) INSECURE MODE (group/other writable) (/etc/crontab)
Apr 24 18:30:01 ip-11-22-33-44 cron[40980]: (*system*) INSECURE MODE (group/other writable) (/etc/cron.d/user)

पहली पंक्ति /etc/crontabफ़ाइल को संदर्भित करती है और बाद में एक फ़ाइल जिसे मैंने नीचे रखा है /etc/cront.d


2

लाइन एक तरह से लिखी गई कोंट्राब समझ में नहीं आती है। इसे सही ढंग से लिखे जाने की आवश्यकता है। यहाँ CrontabHowTo है


1
इसे कैसे डीबग किया जा सकता है?
एडम मटन

क्रोन की त्रुटि लॉग की समीक्षा करना सबसे आम तरीका है। IIRC 'crontab -e' फाइल को संपादित करने के बाद एक सिंटैक्स पार्स करता है - लेकिन यह सार्वभौमिक नहीं हो सकता है।
pbr

2

क्रोन डेमॉन चल सकता है, लेकिन वास्तव में काम नहीं कर रहा है। क्रोन को पुनः आरंभ करने का प्रयास करें:

sudo /etc/init.d/cron restart

3
मैंने इस मामले को उत्पादन में नहीं देखा है। इसका मतलब यह नहीं है कि ऐसा नहीं हुआ है - बस मैंने इसे 30 वर्षों में नहीं देखा है जो मैं यूनिक्स और लिनक्स का उपयोग कर रहा हूं। क्रोन बेहद मजबूत है।
pbr

1
मुझे यकीन नहीं है लेकिन मुझे लगता है कि यह वास्तव में मेरे साथ हुआ। मैंने pidofक्रोन की कोशिश की और कुछ नहीं मिला। serviceउपयोगिता का उपयोग करने की कोशिश की और कहा कि क्रोन पहले से ही चल रहा था। बस यह आदेश दिया और pidofफिर से दौड़ा और मुझे एक परिणाम मिला।
कोलेन

2

एक लाइन में उपयोगकर्ता नाम तर्क के साथ "crontab -e" के माध्यम से क्रॉन को लिखना। मैंने उपयोगकर्ताओं (या sysadmins) के उदाहरण देखे हैं कि वे अपनी शेल स्क्रिप्ट लिख रहे हैं और यह नहीं समझ रहे हैं कि वे स्वचालित क्यों नहीं करते हैं। "उपयोगकर्ता" तर्क / etc / crontab में मौजूद है, लेकिन उपयोगकर्ता द्वारा परिभाषित फ़ाइलें नहीं हैं। उदाहरण के लिए, आपकी व्यक्तिगत फ़ाइल कुछ इस तरह होगी:

# m h dom mon dow command

* * */2  *   *  /some/shell/script

जबकि / etc / crontab होगा:

# m h dom mon dow user   command

* * */2  *   *  jdoe   /some/shell/script

तो, आप उत्तरार्द्ध क्यों करेंगे? खैर, आप अपनी अनुमतियाँ कैसे सेट करना चाहते हैं, इसके आधार पर, यह बहुत ही जटिल हो सकता है। मैंने उन उपयोगकर्ताओं के लिए कार्यों को स्वचालित करने के लिए स्क्रिप्ट लिखी हैं जो पेचीदगियों को नहीं समझते हैं, या शराबी के साथ परेशान नहीं करना चाहते हैं। के लिए अनुमतियाँ सेट करके --x------, मैं उनके बिना स्क्रिप्ट को निष्पादन योग्य बना सकता हूं, ताकि वे इसे पढ़ सकें (और शायद गलती से बदल सकें)। हालाँकि, मैं एक फ़ाइल से कई अन्य लोगों के साथ इस आदेश को चलाना चाह सकता हूं (इस प्रकार इसे बनाए रखना आसान है) लेकिन सुनिश्चित करें कि फ़ाइल आउटपुट को सही मालिक सौंपा गया है। ऐसा करने पर (कम से कम उबंटू 10.10 में) फ़ाइल को पढ़ने के साथ-साथ निष्पादित करने में असमर्थता दोनों पर टूट जाता है, साथ ही / a / crontab में अवधि डालने के साथ पूर्वोक्त उल्लेखित समस्या (जो, मजेदार रूप से पर्याप्त है, जब कोई त्रुटि होती है crontab -e) ।

एक उदाहरण के रूप में, मैंने sudo crontab -eस्क्रिप्ट को रूट अनुमतियों के साथ उपयोग करने के उदाहरणों chown username file_outputको खोल स्क्रिप्ट में संबंधित के साथ देखा है । मैला, लेकिन यह काम करता है। IMHO, अधिक सुंदर विकल्प इसे /etc/crontabउपयोगकर्ता नाम घोषित और उचित अनुमतियों के साथ रखना है , इसलिए file_outputसही जगह और स्वामी के पास जाता है।


"ऐसा करने से (उबंटू 10.10 में कम से कम) फ़ाइल को पढ़ने के साथ-साथ निष्पादित करने में असमर्थता दोनों पर टूट जाता है ....." मुझे स्पष्ट करना चाहिए: / etc / crontab (डिफ़ॉल्ट रूप से) को पढ़ने और निष्पादित करने की अनुमति चाहिए, जबकि आप COULD cronjob बनाने के लिए "sudo crontab -e" चलाएं जो "w" अनुमति, और ".sh" जैसे एक्सटेंशन वाले समस्या दोनों की आवश्यकता को ओवरराइड करता है। मेरे पास क्रॉन कोड को अलग करने और यह जांचने का समय नहीं है कि यह काम क्यों करता है, बस मैंने देखा है एक विवरण।
मांगे

2

आरबॉन पीयर्ट ने वर्बोज़ मोड के बारे में जो बताया, उसका निर्माण करते हुए, कभी-कभी स्क्रिप्ट्स वर्बोज़ मोड में नहीं होती हैं, लेकिन अगर कमांड शामिल है, तो डिफॉल्ट व्यवहार एक पंक्ति या अधिक स्क्रीन पर आउटपुट शुरू होने के बाद शुरू होता है, लेकिन इसे समाप्त नहीं करेगा। उदाहरण के लिए, मैंने अपने इंट्रानेट के लिए एक बैकअप स्क्रिप्ट लिखी थी जिसमें कर्ल का उपयोग किया गया था, एक उपयोगिता जो रिमोट सर्वर पर फ़ाइलों को डाउनलोड या अपलोड करती है, और यह काफी उपयोगी है यदि आप केवल HTTP के माध्यम से दूरस्थ फाइलों तक पहुंच सकते हैं। 'कर्ल http://something.com/somefile.xls ' का उपयोग करने से एक पटकथा लिखी जा रही थी जिसे मैंने लटका दिया था और कभी पूरा नहीं किया क्योंकि यह एक प्रगति रेखा के बाद एक नई रेखा को बाहर निकालती है। मुझे साइलेंट फ्लैग (-s) का उपयोग यह बताने के लिए करना था कि यह किसी भी जानकारी को आउटपुट नहीं करता है, और फाइल को डाउनलोड करने में विफल होने पर हैंडल करने के लिए अपने कोड में लिखें।


1
ऐसे प्रोग्राम जिनके लिए साइलेंट मोड नहीं है, आप उनके आउटपुट को रीडायरेक्ट कर सकते हैं /dev/null। उदाहरण के लिए: some-command > /dev/nullयह केवल मानक आउटपुट को पुनर्निर्देशित करेगा, न कि त्रुटि आउटपुट (जो आमतौर पर आप चाहते हैं, क्योंकि आप त्रुटियों से अवगत होना चाहते हैं)। त्रुटि आउटपुट को भी पुनर्निर्देशित करने के लिए, उपयोग करें some-command &> /dev/null
एलियाह कगन

हाँ, यह मेरा पहला विचार था जब उपर्युक्त-पटकथा लिख ​​रहा था। मैं भूल जाता हूं कि मैंने इसका उपयोग क्यों नहीं किया, संभवतः कुछ गैर-मानक व्यवहार जो कहा समाधान को दरकिनार करते हैं। मुझे पता है कि वर्बोज़ / इंटरेक्टिव मोड कुछ कमांड्स पर डिफ़ॉल्ट है (मैं आपको देख रहा हूं, scp!), जिसका अर्थ है कि आपको शेल स्क्रिप्ट के सुचारू संचालन के लिए आउटपुट को कहा जाना चाहिए।
मांगे

2

हालाँकि आप अपने चर में पर्यावरण चर को परिभाषित कर सकते हैं, आप शेल स्क्रिप्ट में नहीं हैं। तो निम्नलिखित की तरह निर्माण काम नहीं करेगा:

SOME_DIR=/var/log
MY_LOG_FILE=${SOME_LOG}/some_file.log

BIN_DIR=/usr/local/bin
MY_EXE=${BIN_DIR}/some_executable_file

0 10 * * * ${MY_EXE} some_param >> ${MY_LOG_FILE}

ऐसा इसलिए है क्योंकि चरों में चरों की व्याख्या नहीं की जाती है: सभी मानों को लिट्टी के रूप में लिया जाता है। और यह वही है अगर आप कोष्ठक को छोड़ देते हैं। इसलिए आपकी कमांड नहीं चलेगी, और आपकी लॉग फाइलें नहीं लिखी जाएंगी ...

इसके बजाय आपको अपने सभी पर्यावरण चर को सीधे परिभाषित करना होगा:

SOME_DIR=/var/log
MY_LOG_FILE=/var/log/some_file.log

BIN_DIR=/usr/local/bin
MY_EXE=/usr/local/bin/some_executable_file

0 10 * * * ${MY_EXE} some_param >> ${MY_LOG_FILE}

2

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

एक उदाहरण goaccessवेब सर्वर लॉग फ़ाइलों का विश्लेषण करने का कार्यक्रम है । यह क्रोन में काम नहीं करता है:

goaccess -a -f /var/log/nginx/access.log > output.html

और goaccessरिपोर्ट बनाने के बजाय सहायता पृष्ठ दिखाता है। खोल में इस के साथ पुन: पेश किया जा सकता है

goaccess -a -f /var/log/nginx/access.log > output.html < /dev/null

इसके लिए तय goaccessयह है कि इसे फ़ाइल से पढ़ने के बजाय स्टड से लॉग पढ़ें, इसलिए इसका समाधान क्रैटाब एंट्री को बदलना है

cat /var/log/nginx/access.log | goaccess -a > output.html

2

मेरे मामले में क्रोन और क्रॉस्टैब के अलग-अलग मालिक थे।

काम नहीं मैं यह था:

User@Uva ~ $ ps -ef | grep cron | grep -v grep
User    2940    7284 pty1     19:58:41 /usr/bin/crontab
SYSTEM   11292     636 ?        22:14:15 /usr/sbin/cro 

मूल रूप से मुझे क्रोन-कॉन्फ़िगरेशन चलाना और प्रश्नों का सही उत्तर देना था। एक बिंदु है जहां मुझे अपने 'उपयोगकर्ता' खाते के लिए अपना Win7 उपयोगकर्ता पासवर्ड दर्ज करना आवश्यक था। मैंने जो किया है उसे पढ़ने से ऐसा लगता है कि यह एक संभावित सुरक्षा मुद्दा है लेकिन मैं एकल घरेलू नेटवर्क पर एकमात्र व्यवस्थापक हूं इसलिए मैंने फैसला किया कि यह ठीक है।

यहाँ कमांड अनुक्रम है जो मुझे मिल रहा है:

User@Uva ~ $ cron-config
The cron daemon can run as a service or as a job. The latter is not recommended.
Cron is already installed as a service under account LocalSystem.
Do you want to remove or reinstall it? (yes/no) yes
OK. The cron service was removed.

Do you want to install the cron daemon as a service? (yes/no) yes
Enter the value of CYGWIN for the daemon: [ ] ntsec

You must decide under what account the cron daemon will run.
If you are the only user on this machine, the daemon can run as yourself.
   This gives access to all network drives but only allows you as user.
To run multiple users, cron must change user context without knowing
  the passwords. There are three methods to do that, as explained in
  http://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-nopasswd1
If all the cron users have executed "passwd -R" (see man passwd),
  which provides access to network drives, or if you are using the
  cyglsa package, then cron should run under the local system account.
Otherwise you need to have or to create a privileged account.
  This script will help you do so.
Do you want the cron daemon to run as yourself? (yes/no) no

Were the passwords of all cron users saved with "passwd -R", or
are you using the cyglsa package ? (yes/no) no

Finding or creating a privileged user.
The following accounts were found: 'cyg_server' .
This script plans to use account cyg_server.
Do you want to use another privileged account name? (yes/no) yes
Enter the other name: User

Reenter: User


Account User already exists. Checking its privileges.
INFO: User is a valid privileged account.
INFO: The cygwin user name for account User is User.

Please enter the password for user 'User':
Reenter:
Running cron_diagnose ...
... no problem found.

Do you want to start the cron daemon as a service now? (yes/no) yes
OK. The cron daemon is now running.

In case of problem, examine the log file for cron,
/var/log/cron.log, and the Windows event log (using /usr/bin/cronevents)
for information about the problem cron is having.

Examine also any cron.log file in the HOME directory
(or the file specified in MAILTO) and cron related files in /tmp.

If you cannot fix the problem, then report it to cygwin@cygwin.com.
Please run the script /usr/bin/cronbug and ATTACH its output
(the file cronbug.txt) to your e-mail.

WARNING: PATH may be set differently under cron than in interactive shells.
         Names such as "find" and "date" may refer to Windows programs.


User@Uva ~ $ ps -ef | grep cron | grep -v grep
    User    2944   11780 ?        03:31:10 /usr/sbin/cron
    User    2940    7284 pty1     19:58:41 /usr/bin/crontab

User@Uva ~ $

1
हालांकि अच्छी तरह से प्रलेखित, यह एक साइगविन-विशिष्ट बिंदु जैसा दिखता है; क्या यह वास्तव में आस्कुबंटु से संबंधित है?
sxc731

2

मेरे RHEL7 सर्वरों पर, रूट क्रोन नौकरियां चलेंगी, लेकिन उपयोगकर्ता नौकरियां नहीं करेंगे। मैंने पाया कि होम डायरेक्टरी के बिना, नौकरियां नहीं चलेंगी (लेकिन आपको / var / log / cron में अच्छी त्रुटियाँ दिखाई देंगी)। जब मैंने होम डायरेक्टरी बनाई, तो समस्या हल हो गई।


2

यदि आपने अपनी crontab फाइल को विंडोज़ एडिटर (सांबा या कुछ के माध्यम से) का उपयोग करके संपादित किया है और इसे newlines से \ n \ r या just \ r से बदल दिया है, तो क्रोन नहीं चलेगा।

इसके अलावा, यदि आप /etc/cron.d/* का उपयोग कर रहे हैं और उन फ़ाइलों में से एक में एक \ r है, तो क्रॉन फ़ाइलों के माध्यम से आगे बढ़ेगा और जब यह एक खराब फ़ाइल को रोक देगा। निश्चित नहीं है कि क्या समस्या है?

उपयोग:

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