我在特定日期运行一项作业 [客户时间而非本地时间] 来向我的客户发送电子邮件。我使用 cpanel cron 作业,我尝试使用带时区的 cron 作业
但它仍然发送我当地的时区
32 16 08 05 * /usr/bin/curl CRON_TZ=Africa/Algiers https://www.example.com/SendCron.php?CronID=382 #CronID382END # z93v66
我使用 Cron_TZ 做错了什么?
答案1
你的CRON_TZ=
在你的位置错了crontab
文件,作为option 属性为了/usr/bin/curl
。
你应该把它当作环境变量设定在cron 条目:
CRON_TZ=Africa/Algiers
32 16 08 05 * /usr/bin/curl https://www.example.com/SendCron.php?CronID=382
如果你需要在同一行上为单个 cron 条目设置时区,则无法使用CRON_TZ
环境变量,但你需要调用外部env
(在修改后的环境中运行程序)来改变TZ
:
32 16 08 05 * /usr/bin/env TZ=Africa/Algiers /usr/bin/curl https://www.example.com/Send...
请注意,两者都会改变时区用于命令,不用于 cron 守护进程。cron 守护进程只检查字段是否与当前时间匹配,而不管变量是什么CRON_TZ
。systemd-croncrontab
解释这一限制:
systemd-cron 单元以定义的时区运行。它目前不支持每个用户的时区。所有任务:系统任务和用户任务都将基于配置的时区运行。即使用户在其 crontab 中指定 TZ 环境变量,这也只会影响 crontab 中执行的命令,而不会影响 crontab 任务本身的执行。
如果需要根据时区运行计划,则必须更改服务器时区,例如:
ln -sf /usr/share/zoneinfo/Africa/Algiers /etc/localtime