Crontab не запускает скрипт Python


1

У меня следующая проблема: мой скрипт Python 'hello world' не может быть запущен crontab.

Если я установлю инструкцию crontab следующим образом:

* * * * * cd /home/ && /usr/bin/python /home/hello.py

Текст не отображается в терминале.

Но если я сделаю:

* * * * * cd /home/ && /usr/bin/python /home/hello.py >> /home/log.txt

Ubuntu добавляет текст «hello world» в log.txt

вот мой сценарий:

#!/usr/bin/env python
print('Hello World!')

Что я делаю неправильно?

PS уже читал эту тему Почему не работают скрипты crontab?


Вы должны установить терминал и дисплей. Пожалуйста, прочитайте этот ответ askubuntu.com/a/309892/550618
Али Размдидех

Ответы:


2

Ваш скрипт выполняется Cron, и все работает, как и ожидалось. Просто Cron не предназначен для вывода чего-либо в терминал. Итак, IMO, правильный вопрос здесь должен выглядеть примерно так: куда идет стандартный вывод в Cron?

Если он не перенаправлен ( >, >>) или piped ( |) в другую программу, все, что обычно выводится в STDOUT (если вы выполняете команду в командной строке), включая все сообщения об ошибках, будет отправлено в локальный почтовый ящик пользователя, который запускает Cronjob. Чтобы отправлять / получать эти электронные письма, вы должны применить минимальную конфигурацию, как описано здесь: Как настроить Cron для отправки электронных писем?

Большинство предложений в предлагаемом дублировании объясняют, как перенаправить вывод Cronjob в TTY или окно терминала, но чтобы получить вывод там, вы должны заранее войти в систему (в этом окне TTY или терминала). Вот несколько дополнительных примеров:


Кроме того, в этом случае:

  • cd /home/ не нужен, потому что ваш скрипт ничего там не пишет, а скрипт вызывается по его полному пути.
  • /usr/bin/pythonэто не нужно, потому что вы указываете системе, что это скрипт на Python, по шебангу #!/usr/bin/env python. Но в этом случае файл должен иметь исполняемые разрешения: chmod +x /home/hello.py.

0

Вы можете попробовать это!

* * * * * cd /home/ && /usr/bin/python /home/hello.py >> /dev/tty3

(или ваш tty, если не tty3)


1
Пользователь должен сначала войти в систему, что tty. В противном случае мы вернемся к вопросу - куда идет STDOUT в Cron? :)
pa4080
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.