як запустити роботу cron в GMT не за місцевим часом?


8

Як я можу змусити роботу Cron працювати за GMT, а не за місцевим часом?

це мій файл crontab:

#m  h           d   m   wday    command
TZ=GMT
5   0,6,12,18   *   *   *   ~/Documents/bash/transfer.sh

мої завдання, здається, працюють за місцевим часом (GMT + 11) Я запускаю os x snow leopard, але перенесу код на linux, коли розробка завершиться.

Середовище Linux може бути спільним середовищем, де я можу менше контролювати конфігурацію.



Відповіді:


8

Не всі версії cronпідтримки запущених завдань, що використовують часовий пояс, відмінний від системи.

Якщо це так, можливо, специфікація повинна бути ( TZ=GMTабо TZ=UTCбез кутових дужок). У деяких випадках змінна була б CRON_TZ.

Найкраще це перевірити документацію, специфічну для конкретної системи. Див man 5 crontab.


3

Якщо ваш місцевий час Europe/London. Тоді:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 3 * * * [ "$(date +\%z)" = "+0000" ] && COMMAND
15 4 * * * [ "$(date +\%z)" = "+0100" ] && COMMAND
<<<

Ще один приклад:

Якщо ваш звичайний час є +0500зміною UTC, а ваш сезонний час - +0600зміною UTC. Потім додайте +5до всіх годин, зазначених у наведеному вище прикладі. Це означає , що час запуску в 08:15amі 09:15amз вашого місцевого часу відповідно. Отже, ваші модифіковані лінії хронів виглядали б так:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 8 * * * [ "$(date +\%z)" = "+0500" ] && COMMAND
15 9 * * * [ "$(date +\%z)" = "+0600" ] && COMMAND
<<<

[EDIT] Не забудьте \уникнути відсоткових %символів у вашому файлі crontab. Оскільки crontab інтерпретує їх як сепаратор нового рядка. наприклад %-> \%.


1
виникнуть проблеми, якщо ви знаходитесь у часовому поясі, який використовує DST, тому (наприклад, ваш часовий пояс іноді +01: 00, а колись +02: 00
inemanja

2
Можливо, ви могли б допрацювати? Я не думаю, що так. Ми вже обліковуємо DST. У кожному випадку є своя лінія cron. 1 для кожного з / без DST.
Dreamcat4

це має бути прийнятою відповіддю, оскільки вона дозволяє індивідуальним командам різної поведінки
Патрік Макканн

0

Можливо, ви могли б обернути оригінальний двійковий код.

mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}

привіт hlovdal, чи не могли б ви пояснити ці кроки?
складене око

Ви копіюєте crond в crond.real, потім замінюєте crond коротким сценарієм, у якому ви встановлюєте та експортуєте TZ, а потім виконайте crond.real?
складене око

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