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


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



Ответы:


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
<<<

[РЕДАКТИРОВАТЬ] Обязательно \экранируйте любые проценты %в файле crontab. Поскольку crontab интерпретирует их как разделитель новой строки. например %-> \%.


1
будут проблемы, если вы находитесь в часовом поясе, который использует летнее время, поэтому (например) ваш часовой пояс иногда составляет +01: 00, а иногда - +02: 00
inemanja

2
Возможно, вы могли бы уточнить? Я так не думаю. Мы уже приходится на DST. В каждом случае есть своя линия cron. 1 для каждого с / без DST.
Dreamcat4

это должен быть принятый ответ, поскольку он допускает различное поведение отдельных команд
Патрик Макканн

0

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

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

привет, хловдал, не могли бы вы объяснить эти шаги?
сложный глаз

Вы копируете crond в crond.real, затем заменяете crond на короткий скрипт, в котором вы устанавливаете и экспортируете TZ, а затем выполняете crond.real?
сложный глаз

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