问题示例:
* 9 * * * echo 9
* 10 * * * echo 10
Run Code Online (Sandbox Code Playgroud)
以上将每分钟向用户发送一封电子邮件,但所有“9”响应将在 10:00AM -> 10:59AM 发生,而“10”将在 11:00AM->11:59AM 进入.
运行一个工作
* * * * * /bin/date ; /bin/date -u
Run Code Online (Sandbox Code Playgroud)
返回预期的(正确的)日期和时间。UTC 和当地时间(美国/丹佛)都是如此。将此作业更改为在特定时间每分钟运行会导致偏移(作业被告知在 9 点运行,10 点运行等)。
我已经完成的当前调试:
好吧,这很奇怪。也许我的时区文件不知何故搞砸了?让我们检查一下
diff -s /etc/localtime /usr/share/zoneinfo/`cat /etc/timezone`
Files /etc/localtime and /usr/share/zoneinfo/America/Denver are identical
Run Code Online (Sandbox Code Playgroud)
我检查了硬件时钟,看它是否关闭或以某种方式与我的本地设置不一致(以 root 身份运行)。
date ; hwclock
Wed Oct 26 10:50:13 MDT 2016
Wed 26 Oct 2016 10:50:14 AM MDT -0.204171 seconds
Run Code Online (Sandbox Code Playgroud)
看起来有点慢,但这不应该让我的 cron 作业运行整整一个小时,对吗?
我也确信以下几点:
其他可能相关的信息:
运行 Debian。
cat /etc/debian_version
8.6
Run Code Online (Sandbox Code Playgroud)
当前内核
uname -a
Linux BigBox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
更新调试:
运行'hwclock --systohc',行为没有明显变化。运行这个命令来检查
date;hwclock
Wed Oct 26 12:39:09 MDT 2016
Wed 26 Oct 2016 12:39:11 PM MDT -0.875328 seconds
Run Code Online (Sandbox Code Playgroud)
我无法运行“cat /etc/sysconfig/clock”,因为该文件不存在。在 /etc/ 树下运行 find 命令以查找 'clock' 确认我在那里没有该名称的文件。
检查我所知道的是否设置了 CRON_TZ 变量。它不是在用户级别设置,也不是在根级别设置。让 cron 回显它们没有输出。
小智 1
还有一个值得一看的地方: 的启动时脚本cron,或老式系统 crontab 文件/etc/crontab。TZ 环境变量可能被设置为,/etc/init.d/cronie或者/lib/systemd/system/crond.service,我不确定 Debian 用于 init 系统的内容。
当我尝试crond每隔一小时运行一次时,我看到过这样的事情:
0 */2 * * * /opt/dbms/rainstor/archiving/ama_term
Run Code Online (Sandbox Code Playgroud)
crond在奇数小时运行脚本。我怀疑,但从未向自己证明,这与夏令时的混乱有关。