文件中是否可以有多个时区/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
andexport 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
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
结果(运行足够长时间后):
$ 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