2011-06-04 11 views
5

मेरे पास एक पायथन एप्लिकेशन है जो पैरामीटर के लिए कमांड लाइन को पार्स करने के लिए getopt() का उपयोग करता है। यह एक इंटरेक्टिव बैश खोल में ठीक काम करता है, या कमांड लाइन से बुलाया जाने वाला एक बैश स्क्रिप्ट में, बिट क्रॉन के माध्यम से बैश खोल स्क्रिप्ट के भीतर से कॉल होने पर इसे निष्पादित नहीं किया जाएगा। मैं फेडोरा 15.क्रॉन नौकरी में एक पायथन लिपि में बैश पैरामीटर कैसे पास करें?

जब एक क्रॉन जॉब के रूप में बुलाया आवेदन में विफल रहता है उपयोग कर रहा हूँ,/var में निम्न त्रुटि जारी करने/log/संदेश:

myscript.py: abrt: detected unhandled Python exception in myscript.py

ऐसा लगता है कि आदेश पंक्ति पैरामीटर नहीं कर रहे ' टी पाइथन लिपि में ठीक से पारित किया जा रहा है।

उदाहरण के लिए, निम्न आदेश पंक्ति मंगलाचरण ठीक से काम करता है, इनपुट फ़ाइल नाम के लिए "input.txt" स्थापित करने और उनकी इच्छा के मानों को "लॉग ऑन" और "टाइमर" झंडे की स्थापना:

python myscript.py -i input.txt --log --timer 

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

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

/usr/bin/python /path/to/myscript.py -i /path/to/input.txt --log --timer

मैं सोच रहा हूँ कि इस वाक्य रचना, जब एक bash स्क्रिप्ट में प्रयोग किया बुलाया क्रॉन के माध्यम से, myscript.py के बजाय, स्क्रिप्ट के पैरामीटर को पाइथन में पास कर सकता है।

किसी भी मदद की सराहना की जाएगी!

+3

था कभी नहीं किया है लोगों को चलने वाली स्क्रिप्ट और कार्यक्रमों के साथ समस्या है जब बुद्धि से हिन 'क्रॉन (8) ', त्रुटियां अक्सर पर्यावरण चर के गायब होने से आती हैं। इसलिए मुझे विश्वास नहीं है कि यह पैरामीटर पार्सिंग है। उस अनचाहे अपवाद पर अधिक जानकारी प्राप्त करने का प्रयास करें: अपनी संपूर्ण स्क्रिप्ट को 'try'/'catch' ब्लॉक के साथ लपेटें और डिस्क के अपवाद के बारे में विवरण सहेजें। – sarnold

+1

शैल के माध्यम से पायथन निष्पादित करने का प्रयास करें, कुछ '/ bin/bash -c "/ path/to/python/path/to/script जैसे कुछ ..."यह मदद कर सकता है, लेकिन यह सिर्फ एक अनुमान है - मुझे तब तक एक ही समस्या थी जब तक मुझे एहसास हुआ कि क्रॉन इसका उपयोग निष्पादित करने के लिए/bin/sh का उपयोग करता है। – cji

उत्तर

4

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

किसी भी मामले में, मुझे आउटपुट को स्पष्ट रूप से कैप्चर करने में मदद मिलती है। अगर मुझे आउटपुट फाइलें नहीं मिलती हैं, (कम से कम शून्य आकार की फाइलें), तो मुझे पता है कि क्रोंटैब भी नहीं चला था।

यहां सभी आउटपुट कैप्चर करने के लिए सेट नमूना क्रोंटैब प्रविष्टि है।

59 13 05 06 * { /usr/bin/python /path/to/myscript.py -i /path/to/input.txt --log --timer ; } > /tmp/myProj/myscriptPY.trace.`/bin/date +\%Y\%m\%d.\%H\%M` 2>&1 

याद (प्रति @cji की याद दिलाते हैं), कि क्रॉन (का उपयोग करेगा/bin/श जो सिस्टम पर बैश जा रहा है वैसे भी तो किसी भी चर assingments आप बेहतर तरह से किया जाता है कमांड लाइन पर शामिल हवा हो सकता है, 69 13 05 06 * { var=1 ; export var ; cmds ... ; } ...

मैं इस अवसर के लिए एक वातावरण चर एक crontab से फ़ाइल, लेकिन मैं इसे . /path/to/envFile के साथ काम की उम्मीद करेंगे करने के लिए 'स्रोत'।

IHTH

संबंधित मुद्दे