2017-10-13 276 views
0

我有一個shell腳本cron從同一個目錄調用python腳本,但是當這個cron正在執行時,我沒有從我的python腳本得到預期的輸出,當我手動執行它時,我的python腳本的輸出如預期的那樣。從shell腳本調用python腳本cron

我已經提供了Python腳本路徑像 在/ usr/bin中/ Python的room_wise.py

,並給出了shell腳本的所有外殼PARAMS以及但是我的Python腳本沒有使用shell腳本的cron調用。

任何人都可以幫助我嗎?

+1

你有沒有試過'/ usr/bin/python/path/to/room_wise.py'? – Nepho

+0

是的@Nepho,我已經嘗試了這兩個東西, – Sid

+0

是否按預期方式輸出了'which/python'/usr/bin/python'? – Nepho

回答

0

cron作業中的大問題是絕對目錄位置和相對目錄位置。您需要首先將相對路徑分開,如圖所示。

#!/usr/bin/env bash 
dirName=`dirname $0` 
baseName=`basename $0` 
arg1=$1 
arg2=$2 
cd ${dirName} && python ./room_wise.py arg1 arg2 

然後用crontab -e將項目添加到您的用戶cron作業和添加以下內容:

PATH=/usr/bin:/bin:/sbin 
30 00 * * * /my/directory/containing/room_wise_py.sh arg1 arg2 > /my/directory/containing/output.log 2>&1 

你可以看到,我已經添加了路徑,因爲有時這可能是一個問題某些操作系統分配。此外,該腳本與bash腳本存在於相同的目錄中,或者如果修改bash腳本以將$ dirname包含爲$ 1,則可以將目錄位置作爲參數傳遞。

此外,您可以看到我已將所有輸出定向到日誌文件。這是一個非常好的主意,因爲如果出現問題,調試過程有時非常困難。

+0

如果你還沒有這樣做,記得在你的python腳本的開頭添加#!/ usr/bin/env python。從cron中的bash腳本執行軟件時,這也是一個很重要的方面。 –

+0

管線末端的'2>&1'線做了什麼? –