Запуск скрипта Python из Cron.d - PullRequest
       13

Запуск скрипта Python из Cron.d

0 голосов
/ 07 октября 2011

Я пытаюсь запустить команду управления Django через crontab, установленный в /etc/cron.d/mycron в Ubuntu.

Сначала я протестировал базовую настройку, написав следующее в / etc / cron.d / mycron:

* * * * * root command echo "Test $(date)" 2>&1 >> /tmp/mycron.log

И я подтвердил, что /tmp/mycron.log обновляется раз в минуту и ​​содержит ожидаемый текст.

Затем я попробовал следующие варианты, используя свое реальное управлениекоманда:

* * * * * root command python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * root command /usr/bin/python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * root command /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * /usr/bin/python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

И хотя файл журнала создан, он не содержит ожидаемого текста журнала, который выводит моя команда управления.

После каждого варианта я запускаю sudo touch /etc/cron.d/ для перезагрузкихрон.Даже если бы в моем коде Python была ошибка, я ожидал, что какое-то сообщение об ошибке будет зарегистрировано.

Я проверил tail -f /var/log/syslog, и единственные ошибки, которые он показывает, относятся к crontabs, которые не 't начать с «root», за что мне выдается ошибка:

Error: bad username; while reading /etc/cron.d/mycron

Для всех остальных я вижу что-то вроде:

Oct  7 10:54:01 localhost CRON[27805]: (root) CMD (/path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log)

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

1 Ответ

3 голосов
/ 07 октября 2011

Вывод, который вам нужен, либо в /tmp/mycron.log, либо по почте root.Введите mail из-под root для проверки.

Кроме того, почему вы пробуете разные варианты?Синтаксис файлов crontab строго определен (man crontab -S 5), для / etc / crontab это:

min hour day month weekday user cmdline

для личных crontabs, это:

min hour day month weekday cmdline

Вы можете 'Имя пользователя не должно быть в / etc / crontab, также вы не можете использовать /usr/bin/python вместо имени пользователя.

Вам также не нужно слово command, оно работает только потому, что есть встроенная функция bash с этим именем, которая, очевидно, просто запускает команду из своих аргументов.

Правильнострока должна иметь одно из следующих значений:

* * * * * root /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log
* * * * * root /usr/bin/python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

В первом случае manage.py должно быть исполняемым (chmod +x manage.py), а первая строка должна быть #!/usr/bin/python или любым другим путем вашего интерпретатора Python.

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