Задание Cron не запускается после смены часового пояса

13

Я пытался устранить многие из распространенных ошибок,

  1. обеспечение доступности PATH для cron

  2. есть конец строки в конце файла crontab

  3. часовой пояс устанавливается:

    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.

adsisco
источник
1
любая ошибка в логах? Можете ли вы попробовать с абсолютным путем, а не ~/event.shс/home/username/event.sh
Rahul Patil
1
также сделать небольшую модификацию, как* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
Рахул Патил
1
Вы говорите, что часовой пояс установлен правильно, но вы абсолютно уверены в этом? Попробуйте добавить запись вроде * * * * * dateи подтвердите, что dateпоказывает ожидаемое время. Обратите внимание , что установка переменной окружения TZ внутри кронтаб не может повлиять на часовой пояс , используемый хрон демон сам по себе, но это будет влиять на процессы , запущенные через хрон, так что если вы установите TZ в вашем кронтаб я предложил бы комментировать это временно и установка времени с использованием часового пояса системных часов (вероятно, UTC, если вы используете Linux с единственной загрузкой, но, возможно, это местное время).
CVN
1
Вы упускаете суть, @adsisco. Я прошу удалить любую директиву TZ, которая может быть в crontab, а затем повторите попытку. Это заставит дату выполняться с тем же TZ, что и сам демон cron, что позволит нам увидеть, какой часовой пояс cron хочет, чтобы поля времени в. / Etc / localtime влияли только на отображение, а не на системные часы, и я сомневаюсь, что это влияет на cron. Выполняя этот тест, мы можем быть уверены, что ваша проблема никоим образом не связана с часовыми поясами (что, честно говоря, мне кажется).
CVN
1
на самом деле, я думаю, что я просто исправил это, перезагрузив систему ... может ли быть так, что я должен перезапустить службу cron после внесения изменений в TZ? @ MichaelKjörling. БЛАГОДАРНОСТЬ! за указание на возможные проблемы с часовым поясом.
Адсиско

Ответы:

7

Во-первых, вероятность того, что вы попадете в ошибку, из-за которой одно поле будет считаться неправильно, кажется исключительно низкой. Скорее всего, это будет неправильное понимание того, что происходит и чего ожидает cron.

В этом случае мы обнаружили в комментариях к вопросу, что это, скорее всего, проблема, связанная с часовым поясом. Для этого вы бы:

  • Добавить запись как * * * * * dateв crontab
  • Удалить (или закомментировать) любое назначение TZ из crontab

Это заставляет dateработать с настройкой часового пояса invoker, что означает демон cron . Посмотрите на вывод; он покажет, какой часовой пояс использует cron для внутреннего использования, и, таким образом, весьма вероятно, в какой часовой пояс он хочет ввести свои временные поля. Если у вас есть назначение TZ в crontab, вполне возможно, что присвоение переменной окружения TZ будет передано в Вызванные команды, но сам Cron использует другой часовой пояс . Комментируя или удаляя назначение TZ, вы избегаете этой двусмысленности.

Также обратите внимание, что любые изменения в глобальных настройках часового пояса системы (включая, например, / etc / localtime) почти наверняка требуют по крайней мере перезапуска демона cron и, возможно, (хотя и маловероятно) перезагрузки системы для достижения полного эффекта. Редактирование назначения TZ в crontab не должно требовать перезагрузки демона cron, поскольку оно должно обнаружить, что файл был изменен, и перезагрузить его автоматически.

CVn
источник