8

Как сделать так, чтобы задания cron выполнялись по Гринвичу, а не по местному времени?

это мой файл 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 может быть общей средой, где у меня меньше контроля над конфигурацией.

3 ответа3

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 по местному времени соответственно. Таким образом, ваши модифицированные строки cron будут выглядеть так:

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 интерпретирует их как разделитель новой строки. например % -> \% .

0

Возможно, вы могли бы обернуть оригинальный двоичный файл crond.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .