我的问题是 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
备份.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
感谢您的帮助。
最佳答案
您的导入语句失败,因为 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/path
中测试了您的代码通过python uber_sync.py
它起作用了,因为您的模块位于当前目录中。但是当在some/other/dir
执行时通过python /home/user/path/uber_sync.py
当前目录变为 some/other/dir
并且找不到您的模块。
关于python - Cronjob - 运行脚本和 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10482692/