Схожу с ума с выполнения скрипта Python через crontab на Debian! - PullRequest
5 голосов
/ 03 апреля 2009

Вот как выглядит мой файл crontab:

* * * * *  root /usr/bin/python /root/test.py >> /root/classwatch.log 2>&1

Вот как выглядит мой скрипт на python:

#!/usr/bin/python
print "hello"

Cronjob создает файл журнала. Но это пусто. Я также уверен, что файл python не выполняется.

Ценю любую помощь! Я играл с ним в течение прошлых 4 часов без удачи.

Ответы [ 8 ]

4 голосов
/ 03 апреля 2009

Существует два способа создания crontab - для каждого пользователя или глобально. Для глобального crontab (/ etc / crontab) вы указываете пользователя согласно:

# m h dom mon dow user  command
17  *   *   *   *   root        cd / && run-parts --report /etc/cron.hourly

Для пользователей crontabs вы не делаете, согласно:

aj@wherever:~$ crontab -l
0 * * * * /home/aj/bin/update-foobar

Чтобы запустить скрипт Python через #! примечание, вы просто делаете сценарий исполняемым (chmod 755 /root/test.py) и вызываете его напрямую, что-то вроде:

/root/test.py

Если вы не хотите этого делать, вы можете запустить его вручную через интерпретатор python, например:

/usr/bin/python /root/test.py

Это предполагает, что любой пользователь, от имени которого вы работаете (т. Е. Пользователь в / etc / crontab или пользователь, которого вы запускаете crontab -e as), имеет разрешение на просмотр скрипта python - / root может быть недоступен обычному пользователи, например

Вы можете получить хорошее представление о том, выполняется ли ваш скрипт вообще, добавив:

import time
time.sleep(20)   # pause for 20 seconds

и затем проверка с помощью "top", "ps aux" или "pstree", чтобы увидеть, действительно ли работает python.

1 голос
/ 15 сентября 2011
chmod 755 /root/test.py

, а затем

* * * * * /root/test.py >> /root/classwatch.log 2>&1

должно работать.

1 голос
/ 03 апреля 2009

Обновлены ...

Заменить содержимое на

* * * * * date >> /tmp/foo 

Помогает ли эта ссылка ?

Удалить файл, который предполагается создать. Это возвращается? Я думал, что у каждого пользователя есть свой собственный файл crontab, поэтому пользователь в строке является suspsect.
Кто-нибудь пошутил над тобой и заменил двоичный файл python на no op?

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

Можете ли вы сделать od (восьмеричный дамп) файла и посмотреть, если вы поместите управляющий символ или вкладку в файл cron?

0 голосов
/ 03 апреля 2009

Попробуйте просто отправить stdout в файл журнала вместо stderr и stout:
/ usr / bin / python /root/test.py> /root/classwatch.log

0 голосов
/ 03 апреля 2009

Запись в crontab верна, если вы редактируете / etc / crontab - однако если вы используя crontab вашего обычного пользователя (т.е. crontab -e, crontab crontabfle и т. д.) Корневая запись синтаксически неверна.

0 голосов
/ 03 апреля 2009

Это может быть связано с тем, что задание, ранее объявленное не выполнено из-за синтаксической ошибки Вы можете вставить весь свой crontab? Насколько я вижу, ваша линия выглядит хорошо.

0 голосов
/ 03 апреля 2009

Это прекрасно работает на моем компьютере с Linux RHES 4, как показано на рисунке (ПРИМЕЧАНИЕ: я удалил имя пользователя root в crontab).

Я подозреваю, что что-то не так с тем, как вы устанавливаете работу cron или с настройкой cron в своей системе. Как вы устанавливаете это? Вы используете crontab -e или какой-то другой метод? Можете ли вы успешно выполнить какие-либо другие задания cron для root?

0 голосов
/ 03 апреля 2009

Вы пытались поместить скрипт в другое место (например, / usr / local / bin /)?

...