2017-12-27 483 views
-1

我有一個bash腳本,我正在使用它來執行一個特定版本的Python(3.6)的python文件。在bash腳本當前位於我的桌面上(/home/pi/Desktop/go.sh)crontab bash腳本執行 - Raspberry Pi

#!/bin/bash 
python3.6 /home/pi/scriptDir/myScript.py 

這是我的crontab條目,當我做的crontab -l(注意,我已經刪除了我的其他工作)

* * * * * bash /home/pi/Desktop/go.sh # JOB_ID_3 

當我使用命令行或從GUI運行此文件它正確執行。

當我有crontab做到這一點,沒有任何反應。

我的python文件和bash腳本都是可執行的。 chmod + x

有什麼明顯的我失蹤了嗎?

**我的python腳本確實依賴於同一腳本目錄中的其他文件,這可能是問題嗎?

+0

我在> /home/pi/Desktop/clog.log中添加了我的cron,沒有inital輸出,但是當我使用echo時,我可以看到實際的bash腳本正在運行,因爲我得到一個「開始」和「完成「回聲如預期。所以這意味着錯誤與python腳本有關。那麼如何調試/記錄python腳本執行? – Robomato

回答

0

克倫工作是驚人的棘手。除了工作目錄(您必須在某處設置)之外,還需要處理環境設置(例如,$PATH)。

首先將您的shell腳本的標準輸出和錯誤重定向到日誌文件,以便獲得反饋。

+2

這是一個糟糕的摘要[Stack Overflow'cron'標籤信息頁面](/ tags/cron/info),它有一個很好的疑難解答部分。 – tripleee

0

這是什麼讓它爲我工作。我沒有使用我的Python安裝的完整路徑。除非你登錄bash文件,否則沒有跡象表明你有問題。

這是我現在的bash文件。回聲只是爲了確定我確實在運行bash文件。

#!/bin/bash 
echo started 
/home/pi/Python-3.6.0/python home/pi/myScriptFolder/myScript.py 
echo finished 

要打破執行腳本行: /home/pi/Python-3.6.0/python - 是哪裏的Python 3.6.0安裝在我的皮,它可以爲你不同。 home/pi/myScriptFolder/myScript.py是我想運行的腳本。

這裏是我的cron語句:

*/15 * * * * bash /home/pi/Desktop/go.sh > /home/pi/Desktop/clog.log 2>&1 -q -f 

打破這一行: */15 * * * *是cron的時間,在這種情況下,每15分鐘。 bash /home/pi/Desktop/go.sh指定運行一個bash文件和該文件的目錄。 > /home/pi/Desktop/clog.log 2>&1 -q -f這最後一節創建一個名爲clog.log的日誌文件,以便您可以看到發生了什麼。

此處的關鍵不僅僅是記錄go.sh bash文件的執行,還會將2>&1 -q -f添加到日誌請求的末尾。在我這樣做之前,沒有跡象表明存在問題,之後我得到了返回到日誌文件中的python文件錯誤。