2012-05-07 111 views
1

我的問題是,cronjob似乎運行良好,但沒有在.sh文件中正確執行代碼,請參閱下面的詳細信息。Cronjob - 運行腳本和Python

我鍵入crontab -e命令,彈出的cron: 在該文件中:

30 08 * * 1-5 /home/user/path/backup.sh 
45 08 * * 1-5 /home/user/path/runscript.sh >> /home/user/cronlog.log 2>&1 

backup.sh:

#!/bin/sh 
if [ -e "NEW_BACKUP.sql.gz" ] 
then 
    mv "NEW_BACKUP.sql.gz" "OLD_BACKUP.sql.gz" 
fi 
mysqldump -u username -ppassword db --max_allowed_packet=99M | gzip -9c > NEW_BACKUP.sql.gz 

runscript.sh:

#!/bin/sh 
python /home/user/path/uber_sync.py 

uber_sync .py:

import keyword_sync 
import target_milestone_sync 
print "Starting Sync" 
keyword_sync.sync() 
print "Keyword Synced" 
target_milestone_sync.sync() 
print "Milestone Synced" 
print "Finished Sync" 

問題是,它似乎在uber_sync中執行打印語句,但實際上並沒有從導入語句執行代碼......任何想法?

還要注意的是keyword_sync和target_milestone_sync位於作爲uber_sync,即/ home/user中/路徑

感謝您的幫助同一目錄中。

+0

那麼,結局在'/ home/user/cronlog.log'中?任何堆棧跟蹤? - 哦,並且不知道'sync()'是做什麼的,這很難說出什麼地方會出錯。 – mata

+0

檢查PATH。 – Daenyth

回答

1

您的導入語句失敗,因爲python無法找到您的模塊。他們將它們添加到您的搜索路徑,然後導入您的模塊,像這樣(加這uber_sync.py):

import sys 
sys.path.append("/home/user/path") 
import keyword_sync 
import target_milestone_sync 

的Python會在當前目錄(DIR代碼執行中),模塊$PYTHONPATH環境變量和配置文件。這一切都在sys.path結束,它可以像任何列表對象一樣編輯。如果你想了解更多關於某個模塊被導入或不導入的原因,我建議你也看看標準模塊imp

在你的情況下,你通過python uber_sync.py/home/user/path中測試了你的代碼,它工作,因爲你的模塊在當前目錄中。但是,當通過python /home/user/path/uber_sync.pysome/other/dir中執行它時,當前目錄變爲some/other/dir,並且找不到您的模塊。

+0

我今晚將再次運行cron,看看這是否能解決它,這是我懷疑的問題,所以希望這可以工作!謝謝 –

+0

另一個說明:我也必須將備份腳本更改爲絕對路徑。 –