У меня есть следующее задание 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 не позволяет использовать символы%.