【发布时间】:2015-06-23 13:26:31
【问题描述】:
我正在使用Django Post Office 在我的 Django 1.6.2 应用程序中发送电子邮件,但我无法从 crontab 文件中执行 DPO 的“send_queued_mail”命令。我希望命令每分钟执行一次。这是我的第一个 cron 作业(由 root 用户拥有):
$ sudo crontab -e
* * * * * . /home/myproj/venv/swing/bin/activate && /home/myproj/venv/myproj/bin/python /www/myproj/manage.py send_queued_mail >> /var/log/send_mail.log 2>&1
当我检查 /var/log/syslog 时,我可以看到该命令并且它似乎正在正常执行。但是,我在 send_mail.log 文件中看到了这个错误:
Unknown command: 'send_queued_mail'
Type 'manage.py help' for usage.
我突然想到问题是因为这是 root 的 cronjob,我正在尝试为不存在的 root 激活一个虚拟环境。所以我将上面的命令移动到“myproj”用户的 crontab(这个用户拥有该项目),但我仍然得到同样的错误。
我还创建了以下“send-queued-mail-cronjob”脚本来在虚拟环境中执行命令。这种方法已在 SO 上向其他遇到相同问题的人提出建议。
#!/bin/sh
cd /home/myproj
source venv/myproj/bin/activate
venv/myproj/bin/python /www/myproj/manage.py send_queued_mail >> /var/log/send_mail.log 2>&1
我通过用户“myproj”拥有的这个 cronjob 调用它:
* * * * * /www/myproj/bin/send-queued-mail-cronjob
但是,当它运行时,我仍然收到与以前相同的“未知命令错误”。
我还有什么需要做的吗?我可以从命令行执行第一个 cronjob 中的命令而不会出错。当我以用户“myproj”登录时,我也可以从命令行运行脚本中的命令,它们运行得很好。
【问题讨论】:
-
venv是否与sh一起使用?见:stackoverflow.com/questions/7369145/… -
不相关,但我认为您的第一个 cron 作业命令中有错字:
2>&!而不是2>&1 -
@help_asap 谢谢,打错了。
-
@jmunsch 我阅读了您提到的帖子,但我的服务器上没有 virtualenv_activate.sh 命令。 virtualenv 命令已安装到 /usr/local/bin 中,但那里没有这样的文件。
-
您是否在
/usr/local/bin内的服务器中搜索过virtualenv_activate.sh?您是否尝试在 whole 服务器中查找它(例如,使用find、which等命令)?只是为了确定你真的没有它。
标签: django cron virtualenv