cron 文件内的 CRON_TZ 的多个实例(CentOS)

cron 文件内的 CRON_TZ 的多个实例(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/Parisandexport TZ=Europe/Paris代替CRON_TZ。但是没有效果。


我不想更改服务器的原始时区UTC。只想在不同的时区运行某些任务。


我怎样才能像这样使用多个时区?

答案1

我认为您不能同时输入两个时区/etc/crontab,但您可以创建不同的文件,/etc/cron.d每个文件都有不同的时CRON_TZTZ设置。

例如,/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

UTC 时间 17:25,内容/tmp/TZ如下:

Chicago
New_York

答案2

在装有 的 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表示奇数小时。请参阅堆栈溢出服务器故障

结果(运行足够长时间后):

$ 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仅控制启动作业的时间,因此只有当作业不是每小时运行时才有用(正如 Michael 在评论中指出的那样)。用于TZ设置作业看到的环境变量。

Michael 的答案(多个 cron 文件)对于非 root 用户来说并不可行,因为他们只有一个 crontab。拥有多个夏令CRON_TZ时对于处理不同时区的不同夏令时很有用。

ps. 我是从以下命令中了解到我的 cron 版本的,灵感来自这个帖子

$ rpm -qf `which crontab`
cronie-1.4.11-14.el7_2.1.x86_64

相关内容