Django mailer-autosend在本地无法工作(可能:localhost crontab路径不正确?)



我是django的新手,我已经安装了django mailer 2.0。当我手动发送排队的邮件时,它是有效的:(venv)$ python manage.py send_mail,但当我设置crontab(这是我第一次使用cron作业(时,它不起作用。我想路上可能有一些错误。

django mailer的官方文档建议:
* * * * * (/path/to/your/python /path/to/your/manage.py send_mail >> ~/cron_mail.log 2>&1)

矿山:

# first I tried:
* * * * * (/usr/bin/python3 /Users/username/Documents/GitHub/projectname/manage.py send_mail >> ~/cron_mail.log 2>&1)
# then I tried:
* * * * * (/Users/username/Documents/GitHub/projectname/venv/bin/python /Users/username/Documents/GitHub/projectname/manage.py send_mail >> ~/cron_mail.log 2>&1)
# also this:
* * * * * cd /Users/username/Documents/GitHub/projectname; venv/bin/python manage.py send_mail
# I've tried Romeo's solution as well

没有工作。。救命!

然而,当我在bash中使用完全相同的命令时,它是有效的:

$ cd /Users/username/Documents/GitHub/projectname
$ venv/bin/python manage.py send_mail

这确实有效!我完全糊涂了。。。

PS。关于django-mailer:我手动将4封排队的电子邮件分别发送到2个电子邮件地址,但有2封丢失了,从未送达(也没有在垃圾邮件中丢失(。这正常吗?

您可以尝试更改到代码所在的目录,然后运行它:

* * * * * cd /Users/username/Documents/GitHub/projectname; /usr/bin/python3 manage.py send_mail >>  /Users/username/cron_mail.log 2>&1

在cron中最好使用绝对路径。并将其添加到脚本中,再导入您的环境变量。:

#!/bin/bash
source /Users/username/.bash_profile #or .bashrc
cd /Users/username/Documents/GitHub/projectname
venv/bin/python manage.py send_mail >>  /Users/username/cron_mail.log 2>&1

然后使脚本可执行:

chmod +rx script.sh

并将其添加到cron:中

* * * * * /path/to/script.sh