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)
在 Ubuntu 14.04 上运行的 cron 版本不支持CRON_TZ
. 如果您在man 5 crontab
Ubuntu 机器上本地查看,您会发现无法出于调度目的更改 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/timezone
contains America/New_York
,所以上面的命令输出02 17
我应该在 crontab 条目的前两个字段中输入的内容,以便让作业在 21:02 UTC 运行。在您的系统上,该文件可能包含Europe/Moscow
,因此该命令将02 00
改为输出。
归档时间: |
|
查看次数: |
6256 次 |
最近记录: |