Почему скрипт Python работает из CLI, а не при вызове из задания cron? - PullRequest
3 голосов
/ 13 января 2011

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

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

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

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

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

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

Кажется, я нигде не могу найти, чтобы демон cron регистрировал свои ошибки.

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

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

Вот как выглядит мой crontab:
$ crontab -u username -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  
MAILTO=bryanw@nowhere.com  

Я думал, что это выведет на экран, но это не так. Где будут выводить переменные 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 <==  

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

Ответы [ 2 ]

5 голосов
/ 13 января 2011

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

which python

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

2 голосов
/ 13 января 2011
3 17 * * * /bin/sh python /home/username/public_html/IDM_app/manage.py cleanUpPosts  

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...