2013-07-09 103 views
0

首先,我:Perl的計劃作業不起作用

sudo crontab -e -u adrian 

然後我補充一下:

* * * * * cd /home/adrian/app/; perl -I /home/adrian/app/lib/ script/db/log_to_db.pl 

這應該使每分鐘運行該腳本。該腳本用新數據修改數據庫。 所以我每分鐘檢查一次數據庫。沒有數據。 「上次更新」時間列也不會更改。我檢查日誌。此日誌每分鐘出現一次:

Jul 9 13:32:01 dev1 CROND[28658]: (adrian) CMD (cd /home/adrian/app/; perl -I /home/adrian/app/lib/ script/db/log_to_db.pl) 

看起來像一個成功的日誌。但數據庫不會更改,因此腳本沒有運行。此外,如果我手動在我的命令行上執行該行:

cd /home/adrian/app/; perl -I /home/adrian/app/lib/ script/db/log_to_db.pl 

數據庫更改並且腳本運行沒有問題!我在這裏做錯了什麼?

+0

的cron通常將郵件發送到該賬戶持有人,當一個作業運行失敗。你有沒有檢查消息? –

+0

@Karthik T是的,因爲「-I/home/adrian/app/lib /」告訴庫在哪裏,然後「script/db/log_to_db.pl」告訴要運行的腳本路徑。 – ado

+0

@adriancdperu啊我的壞,跳過'-I'。 –

回答

2

由於命令運行在命令行罰款,這個問題是最有可能缺少一些環境變量(一個或多個)。不要直接從cron作業運行perl,而是運行一個包裝腳本來設置環境,然後運行perl。像這樣的東西應該工作(假設你登錄使用bash —根據需要進行調整):

#!/bin/bash 

source /home/adrian/.bash_profile 
cd /home/adrian/app/ 
perl -I /home/adrian/app/lib/ script/db/log_to_db.pl 
+0

感謝這看起來像一個不錯的主意我只是想它現在 – ado

+0

確認,您的方法進行得很順利!謝謝 – ado

+0

'source cd'?這是故意的嗎? – innaM