使用 Cron/Python

使用 Cron/Python

我想知道我的 crontab 作业是否编写正确。我希望在 VPS 上运行它们,但监控它们实际上是不可能的。话不多说,这是我的 cron 作业:

# cd into directory at 2:57 AM 
57 2 * * 1-5 cd /folder_name

# activate the virtual environment
58 2 * * 1-5 . env/bin/activate

# run the main script
59 2 * * 1-5 python main.py

# at 5pm break the script (worried the most about this part)
0 16 * * 1-5 ^C

另外,我将系统时钟更改为东部时间,这是否意味着 cron 作业将使用东部时区运行?

答案1

不,cron不是贝壳。写一个脚本:

#!/bin/sh
cd /folder_name
. env/bin/activate
exec python main.py

使其可执行,然后将一个crontab条目指向它:

57 2 * * 1-5 /path/to/script

然后,该脚本应在每周一到周五的本地时区(您的计算机认为的)2:57 运行。如果您正确配置了邮件系统,结果(如果有)将邮寄给您。

答案2

您的 cron 作业编写不正确。每个 cron 作业都有自己的环境,这意味着该cd命令与后续 cron 作业无关。

至于虚拟环境,我建议你手动激活虚拟环境,然后which python自己运行。这将为您提供python始终在该虚拟环境中运行的完整路径。你应该在你的 cron 中使用这个 python 路径。

最终的 crontab 应该看起来像这样:

0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py

至于稍后终止进程,解决此问题的最常见方法是使用 pidfile。有一些 Python 库可以帮助你做到这一点。 这个答案关于这个主题相当彻底,但与 crontab 问题并没有真正相关。

相关内容