我有一个使用django-cron (https://django-cron.readthedocs.io/en/latest/installation.html)的Django应用程序,我需要在运行在Ubuntu上的AWS EC2中每5分钟执行一次python manage.py runcrons。我试着把这个命令放在crontab -e中,但是什么都没有发生,有什么我错过了吗?
*/5 * * * * source /home/user/.bashrc && source /home/user/django-apps/venv/bin/activate && python /home/user/django-apps/project/manage.py runcrons > /home/bongga-admin/cronjob.log发布于 2019-02-19 18:59:01
我不熟悉Django,但我看到了下一个:
/bin/sh。source是bash中的.的概要,而不是sh中的概要。sh -c 'source ...'将返回一个错误,但&&意味着如果前面的命令返回true,则执行下一个命令,显然您的命令在第一部分失败。您只将最后一个命令的输出重定向到日志文件,因此很可能它仍然是空的。.bashrc中成功地获取sh。crontab中,envvar $PATH的默认值是/usr/bin:/bin。对于位于这些目录之外的所有命令/脚本,您应该应用完整的路径;您可以在作业之前export一个新的$PATH值;甚至可以使用$(which my_command)而不仅仅是my_command。根据以上所述,我想,您的crontab条目必须如下所示:
*/5 * * * * bash -c 'source /home/user/.bashrc && source /home/user/django-apps/venv/bin/activate && python /home/user/django-apps/project/manage.py runcrons' > /home/user/cronjob.log 2>&12>&1也会将错误重定向到日志文件。我更喜欢的另一种方法是创建一个执行所有这些命令的简单脚本:
#!/bin/bash
source /home/user/.bashrc
source /home/user/django-apps/venv/bin/activate
python /home/user/django-apps/project/manage.py runcrons脚本应该是可执行的:
chmod +x /path/to/script.shcrontab将更加简单:
*/5 * * * * /path/to/script.sh > /home/user/cronjob.log 2>&1如果Cron作业是由特定用户的crontab触发的,并且如果希望使脚本更可移植,可以用环境变量$HOME替换D40(请记住,在使用shell中的变量时,需要使用双引号)。
https://askubuntu.com/questions/1119526
复制相似问题