Несколько экземпляров CRON_TZ внутри файла cron (CentOS)

Можно ли иметь несколько часовых поясов в /etc/crontab файл, как показано ниже?

CRON_TZ=Europe/Paris
*/20  *  *  *  *  root /home/user/script.sh >/dev/null 2>&1
*/5  *  *  *  *  root /home/user/script1.sh >/dev/null 2>&1

А потом:

CRON_TZ=UTC
*/5  *  *  *  *  root /home/user/watchdog.sh >/dev/null 2>&1
*/10  *  *  *  *  root /home/user/watchdog1.sh >/dev/null 2>&1

Я также пытался TZ=Europe/Paris а также export TZ=Europe/Paris вместо CRON_TZ перед каждой строкой. Но это не сработало.


Я не хочу менять исходный часовой пояс сервера, который UTC, Просто хочу запускать определенные задачи в разных часовых поясах.


Как я могу использовать несколько часовых поясов, как это?

1 ответ

Я не думаю, что вы можете поместить обе часовые пояса в /etc/crontab, но вы можете сделать разные файлы в /etc/cron.d каждый из которых имеет разные CRON_TZ а также TZ установка.

Например, /etc/cron.d/chicago:

CRON_TZ=America/Chicago
25 12 * * * root echo Chicago >> /tmp/TZ

А также /etc/cron.d/new_york:

CRON_TZ=America/New_York
25 13 * * * root echo New_York >> /tmp/TZ

В 17:25 UTC, содержание /tmp/TZ является:

Chicago
New_York

На машине CentOS 7 с cronie-1.4.11-14.el7_2.1.x86_64, Я могу иметь два CRON_TZв одном файле. Мой файл crontab гласит:

CRON_TZ=Etc/GMT+0
 * */2 * *  * touch ~/temp/cron-0gmt0evenhour
 * 1-23/2 * *  * touch ~/temp/cron-0gmt1oddhour
CRON_TZ=Etc/GMT+1
 * */2 * *  * touch ~/temp/cron-1gmt0evenhour
 * 1-23/2 * *  * touch ~/temp/cron-1gmt1oddhour

1-23/2означает нечетные часы. См StackOverflow и Serverfault.

Результат (после того, как он проработает достаточно долго):

$ ll ~/temp/ --full-time
total 0
-rw-r--r-- 1 packard domain_users 0 2020-11-21 22:59:01.108221582 +0000 cron-0gmt0evenhour
-rw-r--r-- 1 packard domain_users 0 2020-11-21 23:25:01.177041834 +0000 cron-0gmt1oddhour
-rw-r--r-- 1 packard domain_users 0 2020-11-21 23:25:01.176041830 +0000 cron-1gmt0evenhour
-rw-r--r-- 1 packard domain_users 0 2020-11-21 22:59:01.108221582 +0000 cron-1gmt1oddhour

CRON_TZконтролирует только время запуска задания, поэтому это полезно, только если задание НЕ запускается каждый час (как указал Майкл в комментарии). Использовать TZ чтобы установить переменную среды, которую видит задание.

Ответ Майкла (несколько файлов cron) будет невозможен для пользователей без полномочий root, у которых есть только один crontab. И имея несколько CRON_TZ полезен при переходе на летнее время в разных часовых поясах.

пс. Я узнал свою версию cron из следующей команды, вдохновленной этим сообщением.

$ rpm -qf `which crontab`
cronie-1.4.11-14.el7_2.1.x86_64
Другие вопросы по тегам