Скрипт Python не работает как cronjob

Я перепробовал все, и я видел здесь другие вопросы, касающиеся этого, но я не могу на всю жизнь запустить скрипт на python как cronjob.

Я попробовал следующее.

* * * * * /usr/bin/python /home/myhome/myscript.py

Все myscript.py "Спит" - это сон в течение 30 секунд, поэтому я могу проверить, запущены ли процессы, но я еще не видел его.

import time
time.sleep(30)

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

Кстати, это нормально работает в командной строке.

1 ответ

Решение

Да, это должно работать нормально, при условии, что когда вы говорите "все работает нормально в командной строке", вы буквально вставляете ту же команду из записи crontab. Вещи, чтобы проверить:

  1. Работает ли демон cron? (Бежать pidof cron)
  2. Если он работает, попробуйте перезапустить его. (Зависит от вашего вкуса Unix, но что-то вроде service cron restart или же /etc/init.d/cron restart)
  3. Если ваш скрипт по-прежнему не запускается, проверьте все в /var/log для соответствующего вывода - конкретный файл зависит от вашей конфигурации системного журнала, но /var/log/messages а также /var/log/syslog хорошие варианты, если /var/log/cron не существует

Примечание: вам нужно быть root чтобы сделать большинство из этих вещей - если у вас нет доступа, вам нужно поговорить с человеком, который управляет машиной.

Кроме того, когда вы говорите, что открываете файл в /tmpЭто, пожалуй, самая надежная вещь, которую вы можете сделать, чтобы убедиться, что она работает. В самом начале вашего скрипта (до импорта или чего-либо еще) добавьте:

with open("/tmp/testfile", "a") as fd:
    fd.write("I am running\n")

Вы также можете проверить, правильно ли установлен ваш crontab - его нужно поместить в нечто вроде /var/spool/cron/crontabs (это в Ubuntu Linux, он может отличаться в зависимости от версии Unix). Там вы должны увидеть файл с вашим именем пользователя, который должен содержать вашу запись.

Наконец, если вы действительно отчаялись, вы могли бы strace ваш процесс cron, чтобы увидеть, что он делает:

sudo strace -f -p `pidof cron`

Вам не нужно слишком беспокоиться о специфике, но вы должны делать что-то каждую минуту. Если нет, то что-то идет не так.

Другие вопросы по тегам