cron 在 Ubuntu 14.04 上使用哪个时区?

Mik*_*kov 5 ubuntu cron timezone

我需要在格林威治标准时间 21:02 运行一个 cronjob。我的 crontab 是:

 CRON_TZ=GMT
 02 21 * * * thecommand
Run Code Online (Sandbox Code Playgroud)

这在 SuSE 上运行良好,但在 Ubuntu 上不起作用。相反,它在 20:02 运行命令,即时区选择为 GMT+1。为什么?

服务器时区是 MSK(现在是 GMT+3)。

来自 man 8 cron :“守护进程将使用 /etc/timezone 中的时区定义(如果存在)”

 $cat /etc/timezone
 Europe/Moscow
Run Code Online (Sandbox Code Playgroud)

命令 lsb_release -a 说:

 No LSB modules are available.
 Distributor ID: Ubuntu
 Description:    Ubuntu 14.04.1 LTS
 Release:        14.04
 Codename:       trusty
Run Code Online (Sandbox Code Playgroud)

Mar*_*eed 6

在 Ubuntu 14.04 上运行的 cron 版本不支持CRON_TZ. 如果您在man 5 crontabUbuntu 机器上本地查看,您会发现无法出于调度目的更改 cron 的时区被称为限制:

限制

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

所以:你必须找出 cron 使用的时区,并在你的 crontab 中使用它。如果您有生成 crontab 的脚本,则可以自动执行此操作。例如:

TZ=$(</etc/timezone) date +'%M %H' -d @$(date -ud '21:02' +%s)
Run Code Online (Sandbox Code Playgroud)

在我的系统上,/etc/timezonecontains America/New_York,所以上面的命令输出02 17我应该在 crontab 条目的前两个字段中输入的内容,以便让作业在 21:02 UTC 运行。在您的系统上,该文件可能包含Europe/Moscow,因此该命令将02 00改为输出。