我想知道我的 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 问题并没有真正相关。