सत्यापित करें कि क्या क्रोंटैब काम करता है

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

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

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

* संपादित करें 1: मेरे /वार/लॉग/सिस्लॉग में हर दो मिनट में मुझे निम्न त्रुटि होती है:

 (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

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

लिनक्स पर:

service crond statusservice crond stopservice crond start

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

service cron statusservice cron stopservice cron start

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

  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=~/bin:/usr/bin/:/bin

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

SHELL=/bin/bash

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

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

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

क्रॉन आउटपुट के लिए त्रुटि आउटपुट को /देव/नल और ग्रेप /वार/लॉग/सिस्लॉग पर रीडायरेक्ट न करें ।

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 

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

crontab -l

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

  1. मिनट (0-59)

  2. घंटा (0-23)

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

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

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

  6. आदेश

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

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

यह इसे हर मिनट कॉल करेगा!

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

पुराना सवाल और कई जटिल जवाब । सबसे आसान तरीका है कि इस लाइन को अपने क्रोनटैब में जोड़ा जाए

* * * * * /bin/bash -l -c 'date > ~/cron-test.txt'

यह बस हर मिनट फ़ाइल में वर्तमान तिथि लिखेगा ~/cron-test.txt

तो आप बस चलाते हैं cat ~/cron-test.txt और जांचें कि क्या दिखाई गई तारीख वर्तमान तिथि है । यदि यह क्रोनटैब सही ढंग से काम कर रहा है ।

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

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

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

आह !!

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

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

नोट - मैंने जांच की cron.allow, cron.deny भी। अब तक सब ठीक है ।

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