【问题标题】:which timezone does cron use on Ubuntu 14.04?cron 在 Ubuntu 14.04 上使用哪个时区?
【发布时间】:2020-08-01 01:59:33
【问题描述】:

我需要在格林威治标准时间 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

【问题讨论】:

    标签: ubuntu cron timezone


    【解决方案1】:

    在 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 条目的前两个字段中输入内容,以便在 UTC 时间 21:02 运行作业。在您的系统上,该文件可能包含Europe/Moscow,因此该命令将输出02 00

    【讨论】:

      猜你喜欢
      • 2014-09-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2016-10-13
      • 2016-01-06
      • 2015-07-07
      • 2016-04-12
      相关资源
      最近更新 更多