Django-mailer - автоотправка не работает локально (возможно: неверный путь к 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 пропали без вести и не были доставлены (также не потерялись в нежелательной почте). Это нормально?


person LD8    schedule 28.02.2020    source источник
comment
Были ли у вас какие-либо ошибки или результаты работы cron?   -  person kimbo    schedule 28.02.2020
comment
никакой ошибки... по крайней мере, насколько я знаю, не видел ни одной   -  person LD8    schedule 28.02.2020


Ответы (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
person Romeo Ninov    schedule 28.02.2020
comment
Спасибо за ответ. Я пробовал оба, они еще не работали. В вашем первом решении после перехода в каталог следует ли использовать python в виртуальной среде? или глобальный питон? Поскольку я пробовал в bash, что venv/bin/python manage.py send_mail работает, однако я повторяю точно такой же код в crontab, это не так. Вот что я пробовал в bash: * * * * * cd /Users/username/Documents/GitHub/projectname; venv/bin/python manage.py send_mail - person LD8; 28.02.2020
comment
@DL8 используйте скрипт и источник вашего .bash_profile (или .bashrc). Отредактирую мой ответ вашей командой - person Romeo Ninov; 28.02.2020
comment
Спасибо за обновление, однако оно все еще не работает... Я все перепробовал. Не знаю, где может пойти не так - person LD8; 28.02.2020
comment
@ DL8, я забыл один / при получении профиля. Можете ли вы попробовать еще раз, пожалуйста - person Romeo Ninov; 28.02.2020
comment
Эм... все еще не работает. Когда вы говорите, что chmod +rw script.sh эта команда делает script.sh исполняемым, означает ли это, что после запуска этой команды файл script.sh сможет работать как команда в bash? Надеюсь, что нет, потому что, когда я запускаю этот файл напрямую, он говорит, что команда не найдена - person LD8; 28.02.2020
comment
@ DL8, да, это стало командой, вы можете ее запустить. Но если вы находитесь в текущем каталоге (где находится скрипт), вы должны запустить его как ./script.sh - person Romeo Ninov; 28.02.2020
comment
Давайте продолжим это обсуждение в чате. - person LD8; 28.02.2020