Я пытался устранить многие из распространенных ошибок,
обеспечение доступности PATH для cron
есть конец строки в конце файла crontab
часовой пояс устанавливается:
cd /etc cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
Запустив date
в bash, я получаю:
Tue Sep 17 15:14:30 SGT 2013
Чтобы проверить, использует ли cron то же самое время,
* * * * * date >> date.txt
дает ту же дату вывода в date.txt.
Это скрипт, который я пытаюсь выполнить:
event.sh
:
#!/usr/bin/env bash
echo data > /root/data.txt
Используя crontab -e
строку ниже,
* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
Однако, когда я попробовал некоторые другие аргументы, надеясь, что это будет работать в 14:30:
50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
или
50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)
это больше не будет работать. Кажется, есть проблема с моим аргументом часа. Ничего не может быть найдено в /tmp/debug.log
файле либо.
РЕШЕНИЕ:
Оказалось, я должен перезапустить службу cron после внесения изменений в TZ.
~/event.sh
с/home/username/event.sh
* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
* * * * * date
и подтвердите, чтоdate
показывает ожидаемое время. Обратите внимание , что установка переменной окружения TZ внутри кронтаб не может повлиять на часовой пояс , используемый хрон демон сам по себе, но это будет влиять на процессы , запущенные через хрон, так что если вы установите TZ в вашем кронтаб я предложил бы комментировать это временно и установка времени с использованием часового пояса системных часов (вероятно, UTC, если вы используете Linux с единственной загрузкой, но, возможно, это местное время).Ответы:
Во-первых, вероятность того, что вы попадете в ошибку, из-за которой одно поле будет считаться неправильно, кажется исключительно низкой. Скорее всего, это будет неправильное понимание того, что происходит и чего ожидает cron.
В этом случае мы обнаружили в комментариях к вопросу, что это, скорее всего, проблема, связанная с часовым поясом. Для этого вы бы:
* * * * * date
в crontabЭто заставляет
date
работать с настройкой часового пояса invoker, что означает демон cron . Посмотрите на вывод; он покажет, какой часовой пояс использует cron для внутреннего использования, и, таким образом, весьма вероятно, в какой часовой пояс он хочет ввести свои временные поля. Если у вас есть назначение TZ в crontab, вполне возможно, что присвоение переменной окружения TZ будет передано в Вызванные команды, но сам Cron использует другой часовой пояс . Комментируя или удаляя назначение TZ, вы избегаете этой двусмысленности.Также обратите внимание, что любые изменения в глобальных настройках часового пояса системы (включая, например, / etc / localtime) почти наверняка требуют по крайней мере перезапуска демона cron и, возможно, (хотя и маловероятно) перезагрузки системы для достижения полного эффекта. Редактирование назначения TZ в crontab не должно требовать перезагрузки демона cron, поскольку оно должно обнаружить, что файл был изменен, и перезагрузить его автоматически.
источник