2012-05-07 93 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

另一个说明:我也必须将备份脚本更改为绝对路径。 –