Завдання Cron не змінюється після зміни часового поясу


13

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

  1. забезпечення того, щоб PATH були доступні для cron

  2. в кінці файлу crontab є кінцева лінія

  3. часовий пояс встановлюється:

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

Бігаючи dateв баш, я отримую:

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.50:

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.


1
будь-яка помилка в журналах? ви можете, будь ласка, спробувати з абсолютним шляхом замість того, щоб ~/event.shспробувати/home/username/event.sh
Рахул Патіль

1
також робимо невеликі модифікації, такі як* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
Рахул Патіл,

1
Ви говорите, що часовий пояс встановлений правильно, але ви абсолютно впевнені в цьому? Спробуйте додати вподобану запис * * * * * dateта підтвердити, що dateпоказує очікуваний час. Зверніть увагу , що установка змінної оточення TZ всередині кронтаб не може вплинути на часовий пояс , який використовується хрон демон сам по собі, але це буде впливати на процеси , запущені через хрон, так що якщо ви встановите TZ в вашому кронтаб я запропонував би коментувати це тимчасово і встановлення часу, використовуючи часовий пояс системного годинника (можливо, UTC, якщо ви однократно завантажуєте Linux, але може бути місцевий час).
CVn

1
Вам не вистачає точки, @adsisco. Я прошу, щоб ви видалили будь-яку директиву TZ, яка могла бути в crontab, а потім спробуйте її ще раз. Це зробить дату виконання з тим же TZ , як Хроні демоном самого по собі, дозволяючи нам побачити , що часовий пояс Хроні хочуть поле часу в. / І т.д. / LocalTime впливає тільки на відображення, а не системний годин, і я сумніваюся , що це впливає на Хроні. Роблячи цей тест, ми можемо бути впевнені, що ваша проблема жодним чином не пов'язана з часовими поясами (що, чесно кажучи, мені здається).
CVn

1
насправді, я думаю, що я просто виправив це, перезавантаживши систему ... чи могло бути, що мені доведеться перезапустити сервіс Cron після внесення змін до TZ? @ MichaelKjörling. ДЯКУЮ! за вказівку на можливі проблеми часового поясу.
adsisco

Відповіді:


7

По-перше, шанси на те, що ви потрапили на помилку, що спричиняє неправильне врахування одного поля, здається надзвичайно низьким. Ймовірно, це нерозуміння того, що відбувається і що чекає.

У цьому випадку ми з’ясували в коментарях до питання, що це, швидше за все, проблема, пов’язана з часовим поясом. Для цього ви:

  • Додайте запис, як * * * * * dateу crontab
  • Вилучіть (або прокоментуйте) будь-яке завдання TZ із crontab

Це змушує dateпрацювати з налаштуванням часового поясу виклику, що означає демон крона . Подивіться на вихід; він покаже, який крон часового поясу використовує внутрішньо, і, таким чином, велика ймовірність того, в якому часовому поясі він бажає свої часові поля. Якщо у вас є призначення TZ в crontab, легко можливо, що призначення змінної середовища TZ буде передано через викликає команди, але сам cron використовує якийсь інший часовий пояс . Коментуючи або видаляючи завдання TZ, ви уникаєте цієї неоднозначності.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.