Назад | Перейти на главную страницу

Cron не запускает мой оператор Python

В crontab есть следующая запись:

* * * * * python -c "import datetime; datetime.datetime.now()" >> /home/myname/pythoncron1.log

Файл pythoncron1.log создается, но в нем ничего нет, а дата изменения файла не обновлялась с момента создания файла. Я ожидал увидеть в файле несколько строк, по одной на каждую минуту выполнения задания cron.

Почему это может не работать?

(Вы, наверное, догадались, я пытаюсь сделать что-то более сложное, чем приведенный выше пример, но я сузил проблему до того, что python явно не запускается при вызове cron).

Просто чтобы уточнить, есть ли у вас какие-либо операторы печати в вашем скрипте Python?

В интерактивном режиме они вам не нужны:

Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2010, 2, 24, 19, 36, 21, 244853)

В командной строке вы делаете:

example:~% python -c "import datetime; datetime.datetime.now()"      
example:~% python -c "import datetime; print datetime.datetime.now()"
2010-02-24 19:38:59.639324
example:~% 

вам может потребоваться поместить весь путь Python, например. / usr / bin / питон

Если на самом деле это не то, что сказал Френчи, что, скорее всего, так и есть, может быть полезно просмотреть письмо пользователя. Cron отправляет результаты заданий cron по электронной почте в учетную запись пользователя этого crontab. Вот почему вы часто видите, что STDOUT и STDERR передаются по конвейеру в / dev / null, поэтому они не будут отправлены по почте с выводом, который им не важен.

Вы можете использовать команду mail от имени этого пользователя для проверки почты с полезными выводами. Кроме того, файл / var / log / cron может содержать полезную информацию.

python -c "import datetime; datetime.datetime.now()" ничего не выводит, поэтому в файл нечего выводить.

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