无法通过cron运行的管理命令发送电子邮件

时间:2018-11-10 18:23:44

标签: django

我通过cron运行的Django管理命令有一个奇怪的问题。

我已将生产服务器设置为使用Mailgun。我有一个仅发送电子邮件的管理命令:

from django.core.mail import send_mail

class Command(BaseCommand):
    help = 'Send email'

    def handle(self, *args, **options):
        send_mail('Test email', 'Test content', 'noreply@example.com', ['me@example.com',], fail_silently=False)

如果我通过命令行运行它(我正在使用virtualenvwrapper),则此脚本可以完美地工作:

> workon myapp
> python manage.py do_command

或直接:

> /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command

但是当我使用cron(crontab -e)进行设置时:

*/1 * * * * /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command

脚本运行(无错误),但未发送电子邮件。

怎么回事?

1 个答案:

答案 0 :(得分:0)

好的,问题是设置了错误的DJANGO_SETTINGS_MODULE环境变量,并且有几件事使我不喜欢这种气味:

我的manage.py脚本默认为我的设置的“开发”版本:settings.local,它使用命令行电子邮件后端。 Cron抑制了所有输出,所以我没有看到这种情况。

第二,我正在将DJANGO_SETTINGS_MODULE设置为settings.production的外壳中进行测试,因此当我在命令行上运行脚本时,脚本似乎可以正确运行。

修复很容易,将DJANGO_SETTINGS_MODULE添加到crontab:

DJANGO_SETTINGS_MODULE=config.settings.production
*/1 * * * * ...
相关问题