जवाबों:
जांचें कि क्या आप क्रोन के साथ चलने वाले प्रोग्राम की अपनी लॉग फाइलें हैं। अगर वे नहीं करते हैं, लेकिन मानक आउटपुट के लिए अपना आउटपुट लिखते हैं, तो आप इन फ़ाइलों को रीडायरेक्ट कर सकते हैं या उन्हें आपको मेल कर सकते हैं। अंदर crontabs मानक खोल पुनर्निर्देशन काम करता है।
उदाहरण के लिए की त्रुटि उत्पादन अनुप्रेषित करने some_job.sh
के लिए some_job.err
और मानक उत्पादन को त्यागकर (यानी उसे भेजने के लिए /dev/null
) अपने crontab के लिए निम्न पुनर्निर्देशन जोड़ने
33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err
या इसके बजाय आपको यह मेल करने के लिए (यदि mail
उपलब्ध है)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org
/dev/null
?
some_job.sh
करने के लिए stdout से /dev/null
और उसके stdr के बाद stdout (जो अब अब कुछ भी नहीं होता है) को पुनर्निर्देशित करता है । इस तरह केवल उसका स्टैडर स्टडआउट में समाप्त हो जाता है और उसे पास कर दिया जाता है mail
।
जिन प्लेटफार्मों पर मैंने काम किया है, उनमें से अधिकांश क्रोन डेमन्स ने उपयोगकर्ता को क्रोन जॉब्स के stdout / stderr को स्वचालित रूप से ईमेल करने के लिए काम किया है, जिनके कॉन्टैब से जॉब आई है। मैं यह भूल जाता हूं कि सिस्टम-वाइड (गैर-उपयोगकर्ता-विशिष्ट क्रोन नौकरियों से / etc / crontab) क्या होता है। बात यह है कि लोग अब ज्यादातर यूनिक्स जैसे OSes पर मेलर डेमॉन (यानी, मेल ट्रांसफर एजेंट (MTA), जैसे सेंड मेल, ईमेल या पोस्टफिक्स) सेट नहीं करते हैं। तो क्रोन जॉब आउटपुट ईमेल कहीं एक स्थानीय मेल स्पूल फ़ोल्डर में मर जाते हैं अगर वे भी उस तक पहुंचते हैं। तो एक उत्तर सिर्फ आपके मेलर डेमॉन को आग लगाने का हो सकता है, और हो सकता है कि आपके पास अपने "वास्तविक" ईमेल खाते के साथ अपने स्थानीय मेल को अग्रेषित करने के लिए एक ~ / .forward फ़ाइल हो।
यदि आप चाहते हैं कि आपकी नौकरियां विशिष्ट लॉग फ़ाइलों में लिखें, तो आप मानक आउटपुट पुनर्निर्देशन का उपयोग कर सकते हैं जैसे @honk का सुझाव दिया, या, अपनी क्रोन नौकरी को खोलना एक स्क्रिप्ट है, आप अपनी स्क्रिप्ट कॉल लकड़हारा (1) या syslog (1) या कर सकते हैं जो भी अन्य कमांड-लाइन टूल आपके ओएस को प्रदान करता है वह मनमाने ढंग से संदेश भेजना है। तब आप अपने OS के अंतर्निहित तरीकों को कॉन्फ़िगर करने के लिए उपयोग कर सकते हैं कि किस प्रकार के संदेश लॉग इन किए जाते हैं, शायद संपादन /etc/syslog.conf द्वारा।
मेरी ज्यादातर क्रोन नौकरियों ने बैश लिपियों को लागू किया जो मैंने विशेष रूप से क्रोन द्वारा किसी विशेष कारण से शुरू किए जाने के उद्देश्य से लिखा था। उन में, विशेष रूप से जब मैं शुरू में लिख रहा हूं और उन्हें डिबग कर रहा हूं, तो मुझे शेल स्क्रिप्ट की प्रत्येक पंक्ति के अनएक्सपांडेड और विस्तारित रूप को बनाने के लिए बैश के "सेट -vx" का उपयोग करना पसंद है, जिसे निष्पादित होने से पहले stdout को लिखा जाना चाहिए। ध्यान दें कि क्रोन से शुरू की गई शेल स्क्रिप्ट को गैर-लॉगिन, गैर-इंटरैक्टिव शेल माना जाता है, इसलिए आपके मानक शेल स्टार्टअप स्क्रिप्ट जैसे .ashrc और .profile नहीं चलाए जाते हैं। यदि आप bash का उपयोग करते हैं और स्टार्टअप स्क्रिप्ट को चलाने के लिए bash चाहते हैं, तो आपको उस लाइन से पहले अपने crontab में एक पर्यावरण चर "BASH_ENV = / path / to / my / स्टार्टअप / स्क्रिप्ट" को परिभाषित करना होगा जहां आप नौकरी परिभाषित करते हैं।
mail
कमांड लाइन से संदेशों को पढ़ने के लिए कमांड का उपयोग कर सकता है । या देखो /var/spool/mail
। लेकिन अगर आपने मानक प्रेषक की तुलना में पोस्टफ़िक्स या अन्य मेलर स्थापित किया है, तो संदेशों को पढ़ने का एक और तरीका आवश्यक है।
mail -s "cron output" test@example.com
ठीक काम करता है: /
less $MAIL
यदि आप वर्तमान उपयोगकर्ता के लिए क्रोन आउटपुट देखना चाहते हैं या less /var/spool/mail/root
यदि आप रूट के रूप में चलने वाले कमांड के लिए क्रोन आउटपुट देखना चाहते हैं तो इसे चलाकर देखें ।
सबसे सरल तरीका प्रिंट त्रुटियों और savem को एक फ़ाइल में कैप्चर करना है। मेरे पास एक क्रोनजॉब है जो php कमांड लाइन को कॉल करता है, जैसे:
१ ० *
'>' यह मेरा क्रोनजॉब है और '>' के बाद का हिस्सा यह मेरी परियोजना के रूट में लॉग फ़ोल्डर में स्थित फ़ाइल में कैप्चर और सेव है, लेकिन उस जगह पर हो सकता है जहाँ आप चाहते हैं। सतर्क रहें: हर बार क्रोनजॉब को बुलाया जाएगा वह अंतिम लॉग को अधिलेखित कर देगा। आप किसी मौजूदा फ़ाइल के अंत में लिखने के लिए '>>' का उपयोग कर सकते हैं या 'कैट' टर्मिनल कमांड के लिए खोज कर सकते हैं।
यदि आपका कोंट्राब l कर्ल ’या and वेट’ का उपयोग करता है और लिंक का संदर्भ देता है, तो आप एक्सेस-लॉग के लिए / var / log / httpd / appName में खोज कर सकते हैं, यदि क्रोन 500 या 400 के साथ लौट रहा है तो कुछ गलत होना चाहिए।
अंत में, आप / var / log / संदेश भी देख सकते हैं।
मुझे लगता है कि क्रोन-फाइल के भीतर पुनर्निर्देशन इस मामले में सबसे अच्छा विकल्प नहीं हो सकता है।
अक्सर आप लॉगिंग speification सह-नौकरी स्क्रिप्ट के साथ स्थित होना चाहते हैं। इस मामले में, मैं निम्नलिखित सुझाव देता हूं:
#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>
यह क्रॉन जॉब से आउटपुट को कैप्चर-लॉग-टू-फाइल में जोड़ता है।
मैं क्रोन नौकरियों के बारे में ई-मेल रिपोर्ट प्राप्त करना पसंद करता हूं। रख दो
MAILTO=yourmail@domain.com
crontab में और आपको एक ईमेल मिलेगा। बेशक आपको अपने खाते के लिए ई-मेल कॉन्फ़िगर करना होगा।