python - Cronjob - 运行脚本和 Python

标签 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

备份.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/

相关文章:

python - python中两个赋值运算符有什么区别?

python - 在Python中将markdown标题转换为 anchor

php - cronjob执行php错误

cron - 在 OpenShift(红帽云)上每 5 分钟运行一次 CRON 作业

ubuntu - 为什么我的 cron 作业有时会在 cd 上以 "not a directory"失败?

python - 如何在python中为导数实现以下公式?

python-pygame 矩形不会绘制/渲染

php - 在给定时间后自动终止 Linux 进程/php 脚本

linux - 定时任务错误: "/tmp/crontab.calJpk":5: bad day-of-month

python - 这段使用 lambda 的 python 代码有什么问题?