如何更改执行 cron 作业的时区?

如何更改执行 cron 作业的时区?

我想更改执行 cron 作业的时区,但保留系统其余的默认时区。这可能吗?

我读过这篇文章 https://linuxhint.com/set-timezone-crontab/

但我认为这不会影响作业的执行时间。它只是指定 cron 启动后进程应使用哪个时区

答案1

CRON_TZ 指示您的 cron 表在指定的时区内运行,如果您希望它使用与系统不同的时区,您也可以使用 TZ,它会为您的命令设置时区。

# min hour dom month dow command
CRON_TZ=Europe/Helsinki
0 9 * * * TZ=Europe/Helsinki /bin/sh -c 'date +"$USER: \%a \%e \%b \%Y \%H:\%M:\%S \%Z"' >> /tmp/timestamp.log

此 cron 将在芬兰时钟敲响 09:00(即此处 08:00)时运行。

[bac0n@betazoid ~ 07:59]: tail -f /tmp/timestamp.log
bac0n: Sat  4 Dec 2021 09:00:01 EET

如果您想在不同的时区运行特定脚本,则可以使用systemd.timer。有无数种方法来组织您的计时器/服务,例如,您可以使用实例化的计时器来添加不同的时区。

# file: [email protected]
[Unit]  
Description=Timer for timezone %I  
  
[Timer]  
AccuracySec=1s  
OnCalendar=*-*-* 09:00:00 %I  
  
[Install]  
WantedBy=timers.target

第二个服务模板是针对所有启用时区的通用服务,也可以为具有不同属性集的时区创建特定服务。

# file: [email protected]
[Unit]
Description=Service for timezone %I

[Service]
Environment=TZ=%I
ExecStart=/bin/date +"%I: %%a %%e %%b %%Y %%H:%%M:%%S %%Z"
StandardOutput=append:/tmp/timestamp.log

现在您可以开始添加时区。

systemctl enable --now 'timezone@Europe\x2fLondon.timer' 'timezone@Europe\x2fStockholm.timer' 'timezone@Europe\x2fHelsinki.timer'

相关内容