我需要在格林尼治标准时间21:02运行一个cronjob。我的crontab是:
CRON_TZ=GMT
02 21 * * * thecommand
这在SuSE上运行良好,但在Ubuntu上不起作用。相反,它在20:02运行命令,即时区被选为GMT + 1。为什么呢?
服务器时区是MSK(现在是GMT + 3)。
来自man 8 cron: “守护进程将使用/ etc / timezone中定义的时区(如果存在)”
$cat /etc/timezone
Europe/Moscow
命令lsb_release -a说:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
答案 0 :(得分:3)
在Ubuntu 14.04上运行的cron版本不支持CRON_TZ
。如果您在Ubuntu框中本地查看man 5 crontab
,您将看到无法为调度目的更改cron的时区被称为限制:
限制
cron守护程序以定义的时区运行。它目前不支持每用户时区。所有任务:系统和 将根据配置的时区运行用户。即使用户在他的crontab中指定了TZ环境变量 只会影响crontab中执行的命令,而不会影响crontab任务本身的执行。
所以:你必须找出cron正在使用的时区,并在你的crontab中使用它。如果您有生成crontab的脚本,则可以自动执行此操作。例如:
TZ=$(</etc/timezone) date +"%M %H" -d @$(date -ud '21:02' +%s)
在我的系统上,/etc/timezone
包含America/New_York
,因此上面的命令输出02 17
,我应该放在crontab条目的前两个字段中以获取作业运行21:02 UTC在您的系统上,该文件可能包含Europe/Moscow
,因此该命令将输出02 00
。