2011-06-04 71 views
5

我有一個python應用程序,它使用getopt()來解析參數的命令行。它可以在交互式bash shell或從命令行調用的bash腳本中正常工作,它在通過cron在bash shell腳本中調用時不會執行。我使用的Fedora 15如何將bash參數傳遞給cron作業中的python腳本?

時稱爲一個cron作業的應用程序失敗,發出以下錯誤在/ var/log/messages中:

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

似乎在命令行參數AREN」 t被正確地傳遞給python腳本。

例如,下面的命令行調用正常工作,設置輸入文件名「input.txt中」,並設置「日誌」和「計時器」標誌,以他們的所需值:

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

當我試圖通過bash腳本在命令行調用該程序,bash腳本工作正常。但是當我嘗試通過cron運行bash腳本時,執行失敗,出現上述錯誤。

我不知道爲什麼shell腳本無法通過cron正確執行。我使用的全路徑名從用於cron作業的bash腳本中,這樣的環境路徑不應是一個問題:

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

我以爲這句法,在bash腳本中使用時調用通過cron,可能會將腳本的參數傳遞給python,而不是myscript.py。

任何幫助,將不勝感激!

+3

當人們擁有與運行腳本和程序問題從機智hin'cron(8)',錯誤更多地來自缺少的環境變量。所以我不相信這是參數解析。嘗試找出有關未處理的異常的更多細節:用'try' /'catch'塊包裝整個腳本,並將有關該異常的詳細信息保存到磁盤。 – sarnold 2011-06-04 23:16:30

+1

嘗試通過shell執行python,像'/ bin/bash -c「/ path/to/python/path/to/script ...「'這可能有幫助,但這只是一個猜測 - 我有類似的問題,直到我意識到cron使用/ bin/sh來執行它的命令。 – cji 2011-06-04 23:21:26

回答

4

儘管我同意這兩條評論,但使用crontab條目調試問題的一種方法是確保獲取所有錯誤消息。你在看cron用戶的電子郵件文件嗎?任何未被捕獲的cron輸出都將作爲電子郵件發送給用戶ID。 (如果用戶在計算機上沒有電子郵件帳戶,這是一個單獨的問題)。

無論如何,我覺得明確捕獲輸出是有幫助的。如果我沒有得到輸出文件(至少零大小的文件),那麼我知道crontab甚至沒有運行。

下面是一個示例crontab條目,用於捕獲所有輸出。

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的提醒),即cron將會使用/ bin/sh的(這對系統可能無論如何被清盤的bash,所以任何變量assingments你在命令行上等來實現更好召回69 13 05 06 * { var=1 ; export var ; cmds ... ; } ...

我從來沒有機會來「源」的環境變量,從crontab文件,但我希望它與. /path/to/envFile工作。

IHTH

相關問題