मैं अपनी क्रोन नौकरियों के परिणाम कैसे देख सकता हूं?


66

मैं बहुत सारे गाइड देखता हूं कि क्रॉस्टैब कैसे चलाया जाता है, लेकिन अभी मुझे जो कुछ भी सीखने की ज़रूरत है वह है

  1. क्रोन नौकरियों के बारे में लॉग फाइल खोजें
  2. कॉन्फ़िगर करें जो लॉग हो जाता है

जवाबों:


66

जांचें कि क्या आप क्रोन के साथ चलने वाले प्रोग्राम की अपनी लॉग फाइलें हैं। अगर वे नहीं करते हैं, लेकिन मानक आउटपुट के लिए अपना आउटपुट लिखते हैं, तो आप इन फ़ाइलों को रीडायरेक्ट कर सकते हैं या उन्हें आपको मेल कर सकते हैं। अंदर 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?
टिम्मम

7
@ टिमम: मैं काम करता हूं। यह पहले सब कुछ some_job.shकरने के लिए stdout से /dev/nullऔर उसके stdr के बाद stdout (जो अब अब कुछ भी नहीं होता है) को पुनर्निर्देशित करता है । इस तरह केवल उसका स्टैडर स्टडआउट में समाप्त हो जाता है और उसे पास कर दिया जाता है mail
बेंजामिन बैनिएर

9

जिन प्लेटफार्मों पर मैंने काम किया है, उनमें से अधिकांश क्रोन डेमन्स ने उपयोगकर्ता को क्रोन जॉब्स के 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 / स्टार्टअप / स्क्रिप्ट" को परिभाषित करना होगा जहां आप नौकरी परिभाषित करते हैं।


3
यह सही है। एक mailकमांड लाइन से संदेशों को पढ़ने के लिए कमांड का उपयोग कर सकता है । या देखो /var/spool/mail। लेकिन अगर आपने मानक प्रेषक की तुलना में पोस्टफ़िक्स या अन्य मेलर स्थापित किया है, तो संदेशों को पढ़ने का एक और तरीका आवश्यक है।
akostadinov

हमें इसके लिए सिर्फ मेल सेवा एजेंट की आवश्यकता क्यों है? mail -s "cron output" test@example.comठीक काम करता है: /
मार्टिन कोन्सेनी

CentOS पर, मेरे क्रोन आउटपुट को "mailed" को / var / spool / mail हो जाता है। less $MAILयदि आप वर्तमान उपयोगकर्ता के लिए क्रोन आउटपुट देखना चाहते हैं या less /var/spool/mail/rootयदि आप रूट के रूप में चलने वाले कमांड के लिए क्रोन आउटपुट देखना चाहते हैं तो इसे चलाकर देखें ।
sffc

5

जो कार्य क्रोन निष्पादित कर रहे हैं, वे स्वयं लॉगिंग के लिए जिम्मेदार हैं।


2

सबसे सरल तरीका प्रिंट त्रुटियों और savem को एक फ़ाइल में कैप्चर करना है। मेरे पास एक क्रोनजॉब है जो php कमांड लाइन को कॉल करता है, जैसे:

१ ० *

'>' यह मेरा क्रोनजॉब है और '>' के बाद का हिस्सा यह मेरी परियोजना के रूट में लॉग फ़ोल्डर में स्थित फ़ाइल में कैप्चर और सेव है, लेकिन उस जगह पर हो सकता है जहाँ आप चाहते हैं। सतर्क रहें: हर बार क्रोनजॉब को बुलाया जाएगा वह अंतिम लॉग को अधिलेखित कर देगा। आप किसी मौजूदा फ़ाइल के अंत में लिखने के लिए '>>' का उपयोग कर सकते हैं या 'कैट' टर्मिनल कमांड के लिए खोज कर सकते हैं।

यदि आपका कोंट्राब l कर्ल ’या and वेट’ का उपयोग करता है और लिंक का संदर्भ देता है, तो आप एक्सेस-लॉग के लिए / var / log / httpd / appName में खोज कर सकते हैं, यदि क्रोन 500 या 400 के साथ लौट रहा है तो कुछ गलत होना चाहिए।

अंत में, आप / var / log / संदेश भी देख सकते हैं।


1

मुझे लगता है कि क्रोन-फाइल के भीतर पुनर्निर्देशन इस मामले में सबसे अच्छा विकल्प नहीं हो सकता है।

अक्सर आप लॉगिंग speification सह-नौकरी स्क्रिप्ट के साथ स्थित होना चाहते हैं। इस मामले में, मैं निम्नलिखित सुझाव देता हूं:

#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>

यह क्रॉन जॉब से आउटपुट को कैप्चर-लॉग-टू-फाइल में जोड़ता है।


1

मैं क्रोन नौकरियों के बारे में ई-मेल रिपोर्ट प्राप्त करना पसंद करता हूं। रख दो

MAILTO=yourmail@domain.com

crontab में और आपको एक ईमेल मिलेगा। बेशक आपको अपने खाते के लिए ई-मेल कॉन्फ़िगर करना होगा।


मुझे लगता है कि डिबगिंग के लिए इसे चालू करना और बंद करना सबसे आसान है। मैं आमतौर पर ईमेल पते के लिए यूजरनेम @ लोकलहोस्ट का उपयोग करता हूं।
झिलमिलाहट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.