क्रोन जॉब्स कैसे लॉग इन करें?


218

मैं जानना चाहता हूं कि मैं कैसे देख सकता हूं कि क्रोन जॉब्स प्रत्येक निष्पादन पर क्या कर रहे हैं। लॉग फाइलें कहां स्थित हैं? या मैं अपने ईमेल पर आउटपुट भेज सकता हूं? मैंने ईमेल भेजने के लिए ईमेल भेजा है जब क्रोन जॉब चलता है, लेकिन मुझे अभी तक कुछ भी नहीं मिला है।


जवाबों:


347
* * * * * myjob.sh >> /var/log/myjob.log 2>&1

क्रोन जॉब से /var/log/myjob.log पर सभी आउटपुट लॉग करेगा

आप mailईमेल भेजने के लिए उपयोग कर सकते हैं । अधिकांश सिस्टम cronरूट या संबंधित उपयोगकर्ता को ईमेल द्वारा अनहेल्ड जॉब आउटपुट भेजेंगे।


78
विवरण का क्या मतलब है 2>&1: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21
यमनके

5
अगर यह लॉगफ़ाइल कभी नहीं बनाया जाता है तो क्या समस्या हो सकती है?
क्लैंप

10
एफडब्ल्यूआईडब्ल्यू, यदि आप दोनों stderrऔर stdoutलॉग में चाहते हैं, तो 2>&1अप्रत्यक्ष रूप से आना होगा:myjob.sh >> /var/log/myjob.log 2>&1
डैन लेकोक

2
YYYY-MM-DD_hh-mm-secआउटपुट फ़ाइल नाम में कैसे सम्मिलित करें, ताकि हर फ़ाइल नाम अलग हो और पुनर्लेखन के बिना रखा जाए?
डेनिजेल

6
@Danijel serverfault.com/a/117365/193377 0 0 * * * /some/path/to/a/file.php> $ HOME / date +\%Y\%m\%d\%H\%M\%S-cron.log 2> & 1
AnneTheAgear

61

डिफ़ॉल्ट क्रोन लॉग द्वारा / var / log / syslog ताकि आप उपयोग करके क्रोन संबंधित प्रविष्टियों को देख सकें:

grep CRON /var/log/syslog

/ubuntu/56683/where-is-the-cron-crontab-log


2
Ubuntu 12.04 पर, डिफ़ॉल्ट .log के बिना होता है, अर्थात / var / log / syslog
tishma

5
journalctl | grep cronसिस्टम सिस्टम पर उपयोग
Microsoft Linux TM

2
/var/log/cronAWS Linux AMI पर।
जोनाथन

2
याsudo journalctl -u cron
जियानफ्रेंको पी।

2
जहां वास्तव cronमें लॉग इन किया जा रहा है वह बहुत सिस्टम-निर्भर है। लिनक्स सिस्टम पर विभिन्न लॉगिंग गंतव्यों को कैसे कॉन्फ़िगर किया जाता है (या अधिक सही ढंग से, सिस्टम जो उपयोग करते हैं syslog) के विवरण के साथ एक अलग उत्तर है । अन्य प्रणालियों में इन चीजों को कॉन्फ़िगर करने का एक अलग तरीका हो सकता है।
ट्रिपल जू

10

यहाँ मेरा कोड है:

* * * * * your_script_fullpath >> your_log_path 2>&1

">>" का अर्थ है डेटा को फ़ाइलरहित करना? "2> और 1" का अर्थ क्या है, त्रुटि के साथ पूर्ण आउटपुट, है ना?
नलपाइंटर

3
मैनुअल में मूल पुनर्निर्देशन प्रश्नों की सबसे अच्छी जाँच की जाती है। स्टैक ओवरफ्लो पर इन ऑपरेटरों के बारे में डुप्लिकेट प्रश्नों की एक मीट्रिक पोट्रजेबी भी है। लेकिन हाँ, मोटे तौर पर; कहते हैं >>और 2>&1मानक आउटपुट के रूप में उसी स्थान पर मानक त्रुटि भेजने के लिए कहते हैं।
तिहरा

10

लॉगिंग के कम से कम तीन अलग-अलग प्रकार हैं:

  1. लॉगिंग से पहले प्रोग्राम को निष्पादित किया जाता है, जो केवल कमांड को निष्पादित करने के लिए क्रोनजॉब ट्राइएड में लॉग करता है। जैसा कि @Matthew Lock द्वारा पहले ही उल्लेख किया गया है कि एक / var / log / syslog में स्थित है।

  2. प्रोग्राम के बाद त्रुटियों के लॉगिंग ने निष्पादित करने की कोशिश की, जिसे @Spliffster द्वारा उल्लिखित ईमेल या फ़ाइल में भेजा जा सकता है। मैं एक फ़ाइल में प्रवेश करना पसंद करता हूं, क्योंकि ईमेल के साथ आपके पास समस्याओं का एक नया स्रोत है, और यदि ईमेल भेजना और स्वागत करना पूरी तरह से काम कर रहा है, तो इसकी जांच। कभी कभी यह है, कभी कभी यह नहीं है। उदाहरण के लिए, एक साधारण सामान्य डेस्कटॉप मशीन में जिसमें आप smtp को कॉन्फ़िगर करने में रुचि नहीं रखते हैं, कभी-कभी आप फ़ाइल में प्रवेश करना पसंद करेंगे:

     * * * *  COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1
    
    • मैं / ABSOLUTE_PATH_TO_LOG की अनुमतियों की जाँच करने और उस उपयोगकर्ता की अनुमतियों से कमांड चलाने पर भी विचार करूँगा। केवल सत्यापन के लिए, जबकि आप परीक्षण करते हैं कि क्या यह समस्याओं का संभावित स्रोत हो सकता है।
  3. कार्यक्रम का लॉगिंग स्वयं, त्रुटि-हैंडलिंग और ट्रैकिंग उद्देश्यों के लिए लॉगिंग के साथ।

क्रोनोजर के साथ समस्याओं के कुछ सामान्य स्रोत हैं: * बाइनरी के ABSOLUTE पथ को निष्पादित किया जाना है। जब आप इसे अपने शेल से चलाते हैं, तो यह काम कर सकता है, लेकिन क्रोन प्रक्रिया किसी अन्य वातावरण का उपयोग करने लगती है, और इसलिए यदि आप निरपेक्ष पथ का उपयोग नहीं करते हैं, तो यह हमेशा बायनेरी नहीं ढूंढता है। * एक द्विआधारी द्वारा उपयोग किए जाने वाले पुस्तकालय। यह कमोबेश एक ही पिछला बिंदु है, लेकिन यह सुनिश्चित करें कि, यदि केवल कमांड का नाम रखा जा रहा है, तो बाइनरी का बिल्कुल उल्लेख कर रहा है जो बहुत ही लाइब्रेरी का उपयोग करता है, या बेहतर है, जांचें कि क्या बाइनरी आप पूर्ण पथ के साथ संदर्भित कर रहे हैं जब आप सीधे कंसोल का उपयोग करते हैं, तो आप इसे संदर्भित करते हैं। उदाहरण के लिए, खोज आदेश का उपयोग करके बायनेरिज़ पाया जा सकता है:

$locate python

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

  • समस्याओं का एक अन्य सामान्य स्रोत क्रोनजोब में वाक्य रचना है। याद रखें कि विशेष वर्ण हैं जो आप सूचियों (कॉमा) के लिए उपयोग कर सकते हैं, पर्वतमाला (डैश -) को परिभाषित करने के लिए, पर्वतमाला (स्लैश) की वृद्धि को परिभाषित करने के लिए, आदि। एक नज़र डालें: http://www.softpanorama.org/Utilities/ cron.shtml

8

उबंटू पर आप cron.logकेवल CRON प्रविष्टियों को शामिल करने के लिए एक फ़ाइल सक्षम कर सकते हैं।

फ़ाइल cronमें उल्लेखित लाइन को रद्द करें /etc/rsyslog.d/50-default.conf:

#  Default rules for rsyslog.
#

#                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                          /var/log/cron.log

फ़ाइल को सहेजें और बंद करें और फिर rsyslogसेवा को पुनरारंभ करें :

sudo systemctl restart rsyslog

अब आप अपनी फ़ाइल में क्रोन लॉग प्रविष्टियाँ देख सकते हैं:

sudo tail -f /var/log/cron.log

नमूना आउटपुट:

Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)

हालाँकि, आपको इस बारे में अधिक जानकारी नहीं दिखाई देगी कि वास्तव में कौन सी स्क्रिप्टें अंदर चल रही थीं /etc/cron.dailyया /etc/cron.hourly, जब तक कि वे स्क्रिप्ट क्रोन.लॉग को सीधे आउटपुट न दें (या शायद किसी अन्य लॉग फ़ाइल में)।

यदि आप यह सत्यापित करना चाहते हैं कि एक क्रॉस्टैब चल रहा है cron.logया उसमें खोज करने के लिए नहीं है या syslog, अपनी पसंद की लॉग फ़ाइल में आउटपुट को रीडायरेक्ट करता है - कुछ इस तरह:

# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1

इससे उठाए गए कदम: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/


उबंटू 16.04 ने कोई क्रोन लॉग नहीं दिखाया और इस जानकारी ने चाल चली।
pojda

5

cron पहले से ही क्रोन जॉब के मालिक को मेल द्वारा चलाए जाने वाले हर काम के मानक आउटपुट और मानक त्रुटि भेजता है।

आप उपयोग कर सकते हैं MAILTO=recipientमें crontabफ़ाइल किसी दूसरे खाते में ईमेल भेजना।

इस काम के लिए, आपको मेल ठीक से काम करने की आवश्यकता है। स्थानीय मेलबॉक्स में वितरित करना आमतौर पर कोई समस्या नहीं है (वास्तव में, संभावनाएं ls -l "$MAIL"प्रकट होंगी कि आप पहले से ही कुछ प्राप्त कर रहे हैं) लेकिन इसे बॉक्स से बाहर करना और इंटरनेट पर एमटीए (पोस्टफिक्स, सेंडमेल, आपके पास क्या है) की आवश्यकता है दुनिया से जुड़ने के लिए ठीक से कॉन्फ़िगर किया गया है।

यदि कोई आउटपुट नहीं है, तो कोई ईमेल उत्पन्न नहीं किया जाएगा।

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

दोनों आउटपुट स्ट्रीम को पुनर्निर्देशित करने के लिए, वाक्यविन्यास है

42 17 * * * script >>stdout.log 2>>stderr.log

ध्यान दें कि हम >>ओवरराइट के बजाय कैसे (डबल ) एपेंड करते हैं , ताकि किसी भी पिछले नौकरी के आउटपुट को अगले से बदल न जाए।

जैसा कि यहां कई उत्तरों में सुझाया गया है, आप दोनों आउटपुट स्ट्रीम एक ही फाइल में भेज सकते हैं; दूसरी रीडायरेक्शन को 2>&1यह कहने के साथ बदलें कि "मानक त्रुटि जहां भी मानक आउटपुट जा रहा है, उसे जाना चाहिए"। (लेकिन मैं विशेष रूप से इस प्रथा का समर्थन नहीं करता हूं। यह मुख्य रूप से समझ में आता है अगर आप वास्तव में मानक आउटपुट पर कुछ भी उम्मीद नहीं करते हैं, लेकिन कुछ अनदेखी कर सकते हैं, शायद एक बाहरी उपकरण से आ रहा है जिसे आपकी स्क्रिप्ट से कहा जाता है।)

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

एक सामान्य एंटीपैटर सब कुछ पुनर्निर्देशित करना है /dev/null(और फिर स्टैक ओवरफ्लो से यह जानने में मदद करें कि क्या गलत है जब काम नहीं कर रहा है, लेकिन हम खोए हुए आउटपुट को नहीं देख सकते हैं!)

अपनी स्क्रिप्ट के भीतर, नियमित आउटपुट (वास्तविक परिणाम, आदर्श रूप से मशीन-पठनीय रूप में) और डायग्नोस्टिक्स (आमतौर पर एक मानव पाठक के लिए स्वरूपित) को अलग रखना सुनिश्चित करें। एक शेल स्क्रिप्ट में,

echo "$results"  # regular results go to stdout
echo "$0: something went wrong" >&2

कुछ प्लेटफ़ॉर्म (और जीएनयू अवाक) आपको /dev/stderrत्रुटि संदेशों के लिए फ़ाइल नाम का उपयोग करने की अनुमति देते हैं , लेकिन यह ठीक से पोर्टेबल नहीं है; पर्ल में, warnऔर dieमानक त्रुटि के लिए प्रिंट; पायथन में, लिखें sys.stderrया उपयोग करें logging; रूबी में, कोशिश करो $stderr.puts। यह भी देखें कि त्रुटि संदेशों में उस स्क्रिप्ट का नाम कैसे शामिल होना चाहिए जो नैदानिक ​​संदेश का उत्पादन करती है।


1

समझ लें कि आप sudo के साथ कुछ कमांड चला रहे हैं, यह इसकी अनुमति नहीं देगा। सूडो को टटी की जरूरत है।


4
यह sudoकॉन्फ़िगरेशन पर भी निर्भर करता है। जिन चीजों को पासवर्ड की आपूर्ति के बिना चलाने की आवश्यकता है उन्हें NOPASSWD:आपके sudoersकॉन्फ़िगरेशन में कॉन्फ़िगर किया जाना चाहिए ।
ट्रिपलए

0

यदि आप अभी भी अपने क्रॉन जॉब्स की जांच करना चाहते हैं, तो आपको CPanel में क्रोन जॉब्स सेट करते समय एक वैध ईमेल अकाउंट प्रदान करना चाहिए।

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

कृपया ध्यान रखें कि आपको निष्पादित क्रोन नौकरियों में से प्रत्येक के लिए एक ईमेल प्राप्त होगा। यदि आपके क्रोन बहुत बार चलते हैं तो इससे आपके इनबॉक्स में बाढ़ आ सकती है

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