सत्यापित करें कि crontab काम करता है


82

मैं यह सत्यापित करना चाहता हूं कि क्या एक निश्चित क्रेस्टब ठीक से काम करता है। मैंने इस तरह एक नौकरी जोड़ी है:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

मुझे पता है कि मैं अशक्त डिवाइस पर रीडायरेक्ट करता हूं, लेकिन मुझे यकीन नहीं है कि उपरोक्त कमांड अच्छा है।

* संपादित 1: मेरे / var / log / syslog में हर दो मिनट में मेरी निम्नलिखित त्रुटि है:

 (CRON) error (grandchild #2788 failed with exit status 2)

* संपादित 2: इस नई नौकरी के साथ लॉग में कोई त्रुटि नहीं:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

दुर्भाग्य से उपरोक्त सभी ने कोशिश की लेकिन मेरे लिए काम नहीं करता है। जैसा कि आप कहते हैं कि ट्रायल / बिन / श-सी "(निर्यात पथ = = बिन ;/tmp/trial.sh </ dev / null)" संदेश नीचे दिखाता है, यह सुनिश्चित नहीं है कि यह क्या है / बिन / श: पथ = बिन : कोई पहचानकर्ता नहीं है

जवाबों:


73

Crontab प्रविष्टि के लिए सिंटैक्स सही दिखता है। वास्तव में, यदि आप अपने crontab को " crontab -e" का उपयोग करके संपादित करते हैं (जैसा कि आपको करना चाहिए), वैसे भी यदि आप एक वाक्यविन्यास अमान्य crontab प्रविष्टि निर्दिष्ट करते हैं तो आपको एक त्रुटि मिलेगी।

  1. सबसे पहले, /path_to_my_php_script/info.phpकमांड-लाइन से सही ढंग से चलता है?

  2. यदि हां, तो क्या यह भी सही तरह से चलता है ?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. अगर वह काम करता है, तो क्या यह इस तरह काम करता है?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

चरण (3) समान है कि क्रोन आपके प्रोग्राम को कैसे चलाएगा (जैसा कि "मैन 5 क्रोन" में प्रलेखित है।

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

PATH=~/bin:/usr/bin/:/bin

यह भी ध्यान रखें कि क्रोन डिफ़ॉल्ट रूप से उपयोग किया जाएगा /bin/sh, न कि बैश। यदि आपको बैश की आवश्यकता है, तो इसे अपनी crontab फ़ाइल की शुरुआत में भी जोड़ें:

SHELL=/bin/bash

ध्यान दें कि वे दोनों परिवर्तन सभी क्रॉस्टैब प्रविष्टियों को प्रभावित करेंगे । यदि आप अपने info.phpप्रोग्राम के लिए इन मानों को संशोधित करना चाहते हैं , तो आप कुछ ऐसा कर सकते हैं:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

यह भी ध्यान देने योग्य है कि "मेल" के लिए कॉन्फ़िगर किए गए सिस्टम पर (दूसरे शब्दों में एक सिस्टम जिसमें एमटीए कॉन्फ़िगर किया गया है [Sendmail / पोस्टफिक्स / आदि]), crontab प्रोग्राम से सभी आउटपुट स्वचालित रूप से आपको ईमेल के माध्यम से भेजे जाते हैं। एक डिफ़ॉल्ट उबंटू डेस्कटॉप सिस्टम में स्थानीय मेल कॉन्फ़िगर नहीं होगा, लेकिन यदि आप एक सर्वर पर काम कर रहे हैं तो आप उन सभी क्रोन मेलों को देखने के लिए टर्मिनल में "मेल" टाइप कर सकते हैं। यह " at" कमांड पर भी लागू होता है ।


2
मुझे दूसरे चरण के लिए अनुमति से इनकार कर दिया गया है। मुझे क्या करना चाहिए?
अकीकरा

@akikara chmod + x ./cron.sh - स्पष्ट रूप से प्रतिस्थापित करें। आपकी फ़ाइल का स्थान जो भी हो, उसके साथ .cron.sh - आप चलाने की कोशिश कर रहे हैं
Tisch

46

हालांकि बहुत दुर्लभ, कभी-कभी क्रोन ठीक से काम करना बंद कर देता है, भले ही सेवा चल रही हो। यहां यह सत्यापित करने का तरीका बताया गया है कि crond चल रहा है और सेवा को रोकना / शुरू करना है।

लिनक्स पर:

service crond status
service crond stop
service crond start

उबंटू और अन्य डेबियन आधारित प्रणालियों पर:

service cron status
service cron stop
service cron start

13
बस एक नोट ... उबंटू के लिए cron, नहींcrond
अमित कोहली

32

क्रोन आउटपुट के लिए / dev / null और grep / var / log / syslog में त्रुटि आउटपुट को रीडायरेक्ट न करें।

grep cron /var/log/syslog

संपादन /etc/crontabया फ़ाइलों के /etc/cron.d/साथ फ़ाइल सहेजने के बाद आप तुरंत त्रुटियाँ दिखा सकते हैं :

tail -f /var/log/syslog | grep --line-buffered cron

यदि संपादन ठीक है, तो आप केवल RELOADनोटिस देखेंगे, त्रुटियां होंगी

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 

18

आप टर्मिनल कमांड के साथ अपना सक्रिय क्रोन देख सकते हैं:

crontab -l

यहाँ क्रम में पैरामीटर हैं:

  1. मिनट (0 - 59)

  2. घंटा (0 - 23)

  3. महीने का दिन (1 - 31)

  4. महीना (1 - 12)

  5. सप्ताह का दिन (0 - 6) (रविवार = 0)

  6. आदेश

तो, आप प्रत्येक घंटे के पहले मिनट में अपनी स्क्रिप्ट बुला रहे हैं। आपको परीक्षण उद्देश्य के लिए अधिक बार अंतराल पर अपने आउटपुट का परीक्षण करना चाहिए:

* * * * * <command> #Runs every minute

यह इसे हर मिनट कहेंगे!


* * 2 * * * * मैं अब हर दो मिनट में बदल गया
हूं

11

प्रत्येक पंक्ति के समय भाग के लिए, आप अपनी क्रोन समय परिभाषा का परीक्षण / सत्यापन करने के लिए इस क्रोन परीक्षक का उपयोग कर सकते हैं ।


यह अच्छा सुझाव है।
राहिल वज़ीर

2
उपयोगी भी: crontab-generator.org
rubo77

2

मेरा मानना ​​है कि आप run-partsबैंड से क्रॉन जॉब्स चलाने के लिए भी उपयोग कर सकते हैं । यह वास्तव में है कि क्रोन आवधिक क्रोन नौकरियों को चलाने के लिए खुद का उपयोग करता है, इसलिए उपयुक्त तर्कों की आपूर्ति करके आप उन्हें किसी भी समय चला सकते हैं।

यदि आप उदाहरण के लिए सभी क्रोन नौकरियों के बजाय एक फाइल चलाना चाहते हैं, तो आपको /etc/cron.dailyरीजेक्स तर्क को एक वैध रेगेक्स के साथ आपूर्ति करना होगा।run-parts --list --regex '^p.*d$' /etc

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


1

आह !!

मुझे स्वयं उत्तर मिला, मैंने जाँच की और crondडिफ़ॉल्ट स्थापना निर्देशिका के अंदर नहीं पाया/etc/init.d/

अब कोशिश करेंगे और जवाब देंगे।

ध्यान दें - मैं जाँच की थी cron.allow, cron.denyभी। अभी तक सब ठीक है।

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