Почему Python script работает из CLI, но не при вызове из задания cron?

Я создал Python script, который я хочу запускать ежедневно через cronjob на сервере Ubuntu.

Вот как этот script будет запущен из командной строки:

python  /home/username/public_html/IDM_app/manage.py cleanUpPosts  

При вызове из CLI script отлично работает.
Однако, когда я пытаюсь запустить script через cronjob, script не работает должным образом. Файлы журнала показывают, что запрашивается script, но они не показывают, почему script не выполняется должным образом.

Я добавил запись Python в script. Когда script вызывается из CLI, ведение журнала происходит правильно. Когда вызывается из cron, ведение журнала python не может записать в него файл журнала.

Я подозреваю, что проблема заключается в том, что cronjob не запускает оболочку, когда запрашивает script.

Я не могу найти нигде, где демона cron регистрирует его ошибки.

Я создал /var/log/cron.log
Тем не менее это, похоже, не обновляется.

Поскольку я думаю, что проблема связана с переменными ENV, я попытался заставить cronjob отображать ENV для себя.

Вот как выглядит мой crontab:
$ crontab -u имя пользователя -e

m h  dom mon dow   command  
43 17 * * * /bin/sh python /home/username/public_html/IDM_app/manage.py cleanUpPosts  
43 17 * * * python /home/username/public_html/IDM_app/manage.py cleanUpPosts  
45 21 * * * echo "-----------------"; echo "import os; print os.environ" | python  
47 21 * * * /bin/sh echo "------with shell-------"; echo "import os; printos.environ" | python  
[email protected]  

Я думал, что он выйдет на экран, но это не так. Где также будут выводиться переменные ENV?

Независимо отсюда, вот файлы журнала:

# tail -n 5 /var/log/*.log   
==> /var/log/auth.log <==  
Jan 13 17:43:01 servername CRON[7901]: pam_unix(cron:session): session opened for user username by (uid=0)  
Jan 13 17:43:01 servername CRON[7902]: pam_unix(cron:session): session opened for user username by (uid=0)  
Jan 13 17:44:48 servername su[7909]: Successful su for root by username  
Jan 13 17:44:48 servername su[7909]: + /dev/pts/0 username:root  
Jan 13 17:44:48 servername su[7909]: pam_unix(su:session): session opened for user root by username(uid=1000)  

==> /var/log/bootstrap.log <==  

==> /var/log/cron.log <==  

==> /var/log/daemon.log <==  

==> /var/log/dpkg.log <==  

==> /var/log/kern.log <==  

==> /var/log/lpr.log <==  

==> /var/log/mail.log <==  

==> /var/log/mysql.log <==  

==> /var/log/pycentral.log <==  

==> /var/log/user.log <==  

Что еще я должен попробовать, чтобы определить, почему мои скрипты работают неправильно?

Ответ 1

Crontab, вероятно, не может найти исполняемый файл python, хотя он может и в CLI, поэтому вам нужно записать полный путь к python. То же самое вы получаете от

which python

Crontab предоставляет среду для сценариев, которая не совпадает с обычной пользовательской средой.

Ответ 2

3 17 * * * /bin/sh python /home/username/public_html/IDM_app/manage.py cleanUpPosts  

эта строка кажется неправильной. Кажется, вы используете python, как если бы это была оболочка script.