Cronjob - 运行脚本和Python

时间:2012-05-07 13:08:58

标签: python cron

我的问题是cronjob似乎运行正常,但没有在.sh文件中正确执行代码,请参阅下面的详细信息。

我键入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中执行print语句,但实际上并没有执行import语句中的代码......有什么想法吗?

另请注意,keyword_sync和target_milestone_sync与uber_sync位于同一目录中,即/ home / user / path

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

导入语句失败,因为python无法找到您的模块。将它们添加到您的搜索路径,然后导入您的模块,如下所示(将此添加到uber_sync.py):

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

Python在$PYTHONPATH环境变量和配置文件中查找当前目录中的模块(执行代码的目录)。这一切都以sys.path结尾,可以像任何列表对象一样进行编辑。如果您想了解更多关于导入某个模块的原因,我建议您也查看标准模块imp

在您的情况下,您通过/home/user/pathpython uber_sync.py中测试了代码并且它有效,因为您的模块位于当前目录中。但是当通过some/other/dirpython /home/user/path/uber_sync.py执行时,当前目录变为some/other/dir并且找不到您的模块。