我在特定日期[客户时间而非本地时间] 运行一项工作以向我的客户发送电子邮件。我使用 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)
归档时间: |
|
查看次数: |
19541 次 |
最近记录: |