![如何更改执行 cron 作业的时区?](https://linux22.com/image/1025103/%E5%A6%82%E4%BD%95%E6%9B%B4%E6%94%B9%E6%89%A7%E8%A1%8C%20cron%20%E4%BD%9C%E4%B8%9A%E7%9A%84%E6%97%B6%E5%8C%BA%EF%BC%9F.png)
我想更改执行 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'