我正在使用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'登录时,我也可以从命令行运行脚本中的命令,它们运行得很好。
答案 0 :(得分:0)
source
命令不适用于vanilla sh
或Ubuntu的dash
。
您需要使用:
. venv/myproj/bin/activate
而不是:
source venv/myproj/bin/activate