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

Нет вывода файла журнала (или электронной почты с выводом), запускающего скрипт Python через задание cron

У меня есть следующее задание cron, на котором запущен скрипт Python, который, кажется, устанавливается нормально без проблем после его создания в Crontab и сохранения (это на сервере с Centos7). Я не вижу ни файла журнала, ни каких-либо выходных данных, отправленных на указанный адрес электронной почты. Я пробовал это:

*/2 * * * * /home/local/DEV/mdub/FTWFB/FTWFBUploader.py > /home/local/DEV/mdub/FTWFB/logs`date +\%Y-\%m-\%d-\%H:\%M:\%S`-cron.log 2>&1 | mailx -s “Facebook Uploads - Cronlog" mdubs@gmail.com

и это:

*/2 * * * * /home/local/DEV/mdub/FTWFB/FTWFBUploader.py | tee /home/local/DEV/mdub/FTWFB/logs`date +\%Y-\%m-\%d-\%H:\%M:\%S`-cron.log | mailx -s “Facebook Uploads - Cronlog" mdubs@gmail.com

Что я делаю не так?

В обоих файлах я запустил chmod +x (filename) и когда я вручную запускаю сценарии, они запускаются и выводят, как ожидалось.

Лучше всего написать сценарий и вызвать его по полному пути в cron. Это на самом деле просто подкрепляет то, что сказал Джин, но написание сценария, который будет запускать эти команды, позволяет вам протестировать сценарий перед тем, как поместить его в cron.

Кроме того, это облегчает чтение cron в долгосрочной перспективе.

Во-первых, при настройке crontab используйте полный путь для любых команд и скриптов, которые вы вызываете. Например:

  • tee должно быть /usr/bin/tee
  • mailx должно быть /bin/mailx
  • date должно быть /bin/date

Примечание. Если в вашей системе пути разные, измените соответствующим образом

Кроме того, объединение команд в crontab (т.е. конвейер, |) может очень быстро испортиться. Возможно, было бы лучше поместить эти команды в сценарий и вместо этого вызывать его из cron.

Если это не помогает, выполните следующие общие действия по устранению неполадок cron:

Подтвердите это crond включен и работает, например:

$ systemctl status crond | grep enabled
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)

$ ps -ef | grep ^root.*crond
root      1251     1  0 May15 ?        00:00:55 /usr/sbin/crond -n

Проверьте журналы cron, чтобы увидеть, появляются ли там какие-либо ошибки (замените UserName с именем пользователя):

grep UserName /var/log/cron

Проверьте почтовый файл этого пользователя, чтобы увидеть, отображается ли там какой-либо вывод cron:

more /var/mail/UserName

Если ничего не помогает, добавьте перенаправление в конец записи crontab, чтобы помочь отловить любые ложные ошибки, которые могут возникнуть. Например вместо этого:

* * * * * /bin/date | /usr/bin/mailx -s cron.test UserName@domain.tld

Сделай это:

* * * * * /bin/date | /usr/bin/mailx -s cron.test UserName@domain.tld > /tmp/crontab.test.UserName.log 2>&1

Cron не позволяет использовать символы%.