如何在crontab中运行自定义的manage.py和虚拟环境?

7 投票
2 回答
5461 浏览
提问于 2025-04-17 15:15

如何在定时任务(crontab)中运行

*/1 * * * * /home/user/Desktop/job/dp/ python manage.py statistics

使用虚拟环境时,我需要先激活虚拟环境(否则它是无法工作的)

这是我的虚拟环境:

source job/bin/activate

2 个回答

4

你可以使用类似这样的命令:~/envs/someenv/lib/python /path/to/your/script

在你的情况下,它会像这样:

*/1 * * * * ~/envs/someenv/lib/python /home/user/Desktop/job/dp/manage.py statistics

16

编辑:

可以试试这样做:

*/1 * * * * . /path-to-env/bin/activate && /home/user/Desktop/job/dp/manage.py statistics

这段话的意思是:先激活环境,如果成功了,就执行manage.py这个脚本。因为manage.py应该有一个python的开头标记,而且虚拟环境会设置正确的python解释器,所以这样应该没问题。

显然,cron通常是用 /bin/sh 来运行的,而这个环境不认识 source 这个命令。所以一个选择是用一个点(.)来替代 source。另一个选择是在cron文件中设置 /bin/bash

SHELL=/bin/bash
*/1 * * * * source /path-to-env/bin/activate && /home/user/Desktop/job/dp/manage.py statistics

想了解更多这个问题,可以查看: http://codeinthehole.com/writing/running-django-cronjobs-within-a-virtualenv/ 这篇文章没有提到 source 可以用一个点(.)来替代,但我试过了,确实有效。所以现在你有几个选择可以考虑,文章里还有其他的选项哦。;)

撰写回答