0

我是 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 封丢失了,从未送达(也没有在垃圾邮件中丢失)。这是正常的吗?

4

1 回答 1

1

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

* * * * * 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
于 2020-02-28T07:46:55.883 回答