首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在crontab中运行Django cron?

如何在crontab中运行Django cron?
EN

Ask Ubuntu用户
提问于 2019-02-19 13:36:20
回答 1查看 7.1K关注 0票数 3

我有一个使用django-cron (https://django-cron.readthedocs.io/en/latest/installation.html)的Django应用程序,我需要在运行在Ubuntu上的AWS EC2中每5分钟执行一次python manage.py runcrons。我试着把这个命令放在crontab -e中,但是什么都没有发生,有什么我错过了吗?

代码语言:javascript
复制
*/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
EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2019-02-19 18:59:01

我不熟悉Django,但我看到了下一个:

  1. 默认的Cron外壳是/bin/sh
  2. 命令sourcebash中的.的概要,而不是sh中的概要。
  3. 因此,sh -c 'source ...'将返回一个错误,但&&意味着如果前面的命令返回true,则执行下一个命令,显然您的命令在第一部分失败。您只将最后一个命令的输出重定向到日志文件,因此很可能它仍然是空的。
  4. 此外,我认为您无法在.bashrc中成功地获取sh
  5. crontab中,envvar $PATH的默认值是/usr/bin:/bin。对于位于这些目录之外的所有命令/脚本,您应该应用完整的路径;您可以在作业之前export一个新的$PATH值;甚至可以使用$(which my_command)而不仅仅是my_command

根据以上所述,我想,您的crontab条目必须如下所示:

代码语言:javascript
复制
*/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>&1
  • 最后一部分2>&1也会将错误重定向到日志文件。

我更喜欢的另一种方法是创建一个执行所有这些命令的简单脚本:

代码语言:javascript
复制
#!/bin/bash
source /home/user/.bashrc
source /home/user/django-apps/venv/bin/activate
python /home/user/django-apps/project/manage.py runcrons

脚本应该是可执行的:

代码语言:javascript
复制
chmod +x /path/to/script.sh

crontab将更加简单:

代码语言:javascript
复制
*/5 * * * * /path/to/script.sh > /home/user/cronjob.log 2>&1

如果Cron作业是由特定用户的crontab触发的,并且如果希望使脚本更可移植,可以用环境变量$HOME替换D40(请记住,在使用shell中的变量时,需要使用双引号)。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1119526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档