[Linux] CRON 时间格式和执行间隔存在问题

你好。

我是系统解决方案部门的宫崎,最近获得了AWS和GCP认证。
我的LPIC成绩是000分,而我的目标是202分。

这次我想写一下我在设置 CRON 时间格式和执行间隔时遇到的问题。

CRON 时间格式

首先,可以使用 CRON 指定的日期和时间如下所示。
参考: CRONTAB 手册页

场地 可能的值
分钟 0-59
时间 0-23
本月最后一天 1-31
1-12
星期几 0-7

基于此,下面提供一个配置示例。

# 执行 db_backup.sh 脚本,时间为 04:00 0 4 * * * /home/centos/db_backup.sh
# 每 30 分钟执行一次 rsync */30 * * * * /home/centos/rsync.sh
# 每月15日计数 * * 15 * * /home/centos/count.sh
# 每周一删除文件 * * * 1 * /home/centos/delete.sh
# 每 1 分钟运行一次 * * * * * /home/centos/1hunoki.sh

基本上就是这样。
我确信还有其他问题,但我这次遇到的问题是每隔45分钟运行一次时出现的。

每隔 45 分钟执行一次

那么,如何配置才能让它每 45 分钟运行一次 shell 脚本呢?我
最初尝试过这样设置,觉得或许可行。

#每 45 分钟运行一次 */45 * * * * /home/centos/45hunoki.sh

是的,这是不正确的。

检查 cron 日志

[root@test-server ~]# cat /var/log/cron 9月21日 19:45:01 test-server CROND[3890]: (root) CMD (/home/centos/45hunoki.sh) 9月21日 20:00:01 test-server CROND[3894]: (root) CMD (/home/centos/45hunoki.sh) 9月21日 20:45:01 test-server CROND[3899]: (root) CMD (/home/centos/45hunoki.sh)

执行时间为00:45。为什么……

出现这种情况的原因是,“*/45”中的“*/”并没有包含0:00到24:00之间的所有“分钟”。
这个解释可能有点令人困惑。
换句话说,它没有包含00:59、01:00、01:01等等。

*/45 替换后变为 00-59/45。
因此,它表示指定 00 和 45。

顺便一提,如果您指定 01-12/3,
则您指定了 01、04、07 和 10。

如果使用 */9,则值将为 0、9、18、27、...、54、0。
请注意,超过 54 后,值将返回 0。

CRON MAN 页面上有如下说明:

间隔值也可以用范围来指定。范围后面的“/”表示跳过该范围内的指定次数。例如,在小时字段中指定“0-23/2”将使命令每两小时运行一次。

CRONTAB 手册页

考虑到这一点,如果你想每 45 分钟运行一次,正确的做法如下:

*/45 */3 * * * $45hunoki.sh 30 1-22/3 * * * $45hunoki.sh 15 2-23/3 * * * $45hunoki.sh

如果每 45 分钟运行一次,就会得到这样的模式:
- 从 0:00 开始,每 3 小时在整点 00 分和 45 分
运行 - 从 1:00 到 22:00,每 3 小时在整点 30 分运行
- 从 2:00 到 23:00,每 3 小时在整点 15 分运行

分钟 00 15 30 45
0点钟 00:00 00:45
1点钟 1:30
两点钟 02:15
3点钟 03:00 03:45
4点钟 04:30
五点钟 05:15

当你制作表格时,无论是每 40 分钟还是每 50 分钟,你都可以看出其中的规律。

概括

我为自己竟然认为*/45没问题而感到羞愧。
再次审视MAN时,我意识到有很多我之前没有注意到的地方。
我建议你把它们写下来;你会发现其中的规律出乎意料地容易发现。

就这样。

如果您觉得这篇文章对您有帮助,请点个“赞”!
4
加载中...
4票,平均分:1.00/14
58,039
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

宫崎健太

我于 2017 年以应届毕业生的身份加入 Beyond 公司。

我们为主要服务于开发网络服务的公司提供服务器/云平台的全天候 (24/7/365) 运维和监控服务。我
隶属于系统解决方案部门,我的工作目标是提升 Beyond 的运营效率,从而让我们的客户能够专注于自身业务。

认证:AWS 认证解决方案架构师、GCP 专业云架构师、Linuc1