我在特定的date[客户时间不是当地时间]运行一个工作,发送电子邮件给我的客户。 我使用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做了什么错误?
您的CRON_TZ=作为/usr/bin/curl的选项属性 ,位于crontab文件中的错误位置。
你应该把它作为一个环境variables设置在cron条目之前:
CRON_TZ=Africa/Algiers 32 16 08 05 * /usr/bin/curl https://www.example.com/SendCron.php?CronID=382
如果您需要在同一行上为单个cron条目设置时区,则CRON_TZ环境variables无法使用时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_TZvariables。 systemd-cron crontab的手册页解释了这个限制:
systemd-cron单元以定义的时区运行。 目前它不支持每个用户的时区。 所有任务:系统和用户将根据configuration的时区运行。 即使用户在其crontab中指定了TZ环境variables,也只会影响在crontab中执行的命令,而不会影响crontab任务本身的执行。
如果您需要根据时区运行计划,则必须更改服务器时区 ,例如:
ln -sf /usr/share/zoneinfo/Africa/Algiers /etc/localtime