如何在 Cron 选项卡中使用 TimeZone

Sal*_*med 8 cron timezone

我在特定日期[客户时间而非本地时间] 运行一项工作以向我的客户发送电子邮件。我使用 cpanel cron 作业我尝试使用带时区的 cron 作业

但它仍然以我当地的时区发送

32 16 08 05 *  /usr/bin/curl CRON_TZ=Africa/Algiers https://www.example.com/SendCron.php?CronID=382 #CronID382END # z93v66 
Run Code Online (Sandbox Code Playgroud)

我使用 Cron_TZ 做错了什么?

Esa*_*nen 18

CRON_TZ=是在你的一个错误的地方crontab文件,作为一个选项属性/usr/bin/curl

您应该将其作为在cron 条目之前设置的环境变量

CRON_TZ=Africa/Algiers 

32 16 08 05 *  /usr/bin/curl https://www.example.com/SendCron.php?CronID=382
Run Code Online (Sandbox Code Playgroud)

如果您需要在同一行上为单个 cron 条目设置时区,则无法使用CRON_TZ环境变量,但您需要调用外部env(在修改后的环境中运行程序)来更改TZ

32 16 08 05 * /usr/bin/env TZ=Africa/Algiers /usr/bin/curl https://www.example.com/Send...
Run Code Online (Sandbox Code Playgroud)

请注意,两者都更改了命令的时区,而不是 cron daemon。cron 守护进程只检查字段是否与当前时间匹配,而不管CRON_TZ变量如何。systemd-croncrontab的手册页解释了这个限制:

systemd-cron 单元以定义的时区运行。它目前不支持每个用户的时区。所有任务:系统和用户的将根据配置的时区运行。即使用户在他的 crontab 中指定了 TZ 环境变量,这也只会影响在 crontab 中执行的命令,而不会影响 crontab 任务本身的执行。

如果您需要根据时区运行计划,则必须更改服务器时区,例如:

ln -sf /usr/share/zoneinfo/Africa/Algiers /etc/localtime
Run Code Online (Sandbox Code Playgroud)

  • @SalemAhmed 您可以运行`32 16 08 05 * /usr/bin/env TZ=... yourcommand ...` 将其设置为特定于命令。 (2认同)