क्रॉन जॉब कमांड्स के तीन सामान्य कारण हैं जो सामान्य बुद्धि के मोटे क्रम में सीधे एक इंटरैक्टिव शेल में टाइप किए गए कमांड्स की तुलना में अलग व्यवहार करते हैं:
- क्रोन एक सीमित वातावरण प्रदान करता है, उदाहरण के लिए, एक न्यूनतम
$PATH, और अन्य अपेक्षित चर गायब हैं।
- क्रोन
/bin/shडिफ़ॉल्ट रूप से आह्वान करता है, जबकि आप कुछ अन्य शेल का अंतःक्रियात्मक रूप से उपयोग कर सकते हैं।
- क्रोन
%चरित्र को विशेष रूप से मानते हैं (इसे कमांड में एक नई रेखा में बदल दिया जाता है)।
- क्रोन एक टर्मिनल या ग्राफिकल वातावरण प्रदान नहीं करता है।
आपको एक क्रॉस्टैब फ़ाइल में सभी %वर्णों से पहले होना चाहिए \, जो क्रॉन को केवल एक प्रतिशत कमांड में बताता है। याद रखें कि जब आप dateक्रॉन जॉब में कमांड का उपयोग करते हैं ।
55 8 * * 3 /usr/bin/php /home/mark/dev/processes/customClient/events.php > "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"
0 9 * * 3 /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s "Events from $(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d)" -a "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"
मैंने कुछ उद्धृत समस्याएं भी तय कीं:
- यह आपको सुस्ती के अलावा अन्य समस्याओं का कारण नहीं बना रहा था, लेकिन आपको कमांड प्रतिस्थापन के लिए बैकटिक्स का उपयोग नहीं करना चाहिए।
$(…)इसके बजाय उपयोग करें : इसके पार्सिंग नियम सरल हैं।
- हमेशा के आसपास चर और आदेश प्रतिस्थापन दोहरे उद्धरण चिह्नों का उपयोग करें:
"$somevariable", "$(somecommand)"। यहां उद्धरणों की कमी हानिरहित थी क्योंकि dateकमांड ने आपके द्वारा उपयोग किए गए प्रारूपों के लिए कोई विशेष चरित्र कभी नहीं लौटाया, लेकिन आपको ध्यान से याद रखना होगा कि कौन से वर्ण विशेष हैं और हर बार जब आप एक प्रतिस्थापन छोड़ते हैं तो इसे जांचें। इसे सरल रखें, हमेशा दोहरे उद्धरण चिह्नों का उपयोग करें जब तक कि आप परिणाम पर क्षेत्र विभाजन और फ़ाइल नाम नहीं चाहते।
- आपके पास कुछ एकल कोट थे जो कुछ कमांड प्रतिस्थापन के आसपास विस्तार को रोकते थे। इसके बजाय दोहरे उद्धरण चिह्नों का उपयोग करें।
/bin/sh: 1: Syntax error: EOF in backquote substitutionपहली क्रोन नौकरी के लिए।/bin/sh: 1: Syntax error: Unterminated quoted stringदूसरी क्रोन नौकरी के लिए।