[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”将使命令每两小时运行一次。
考虑到这一点,如果你想每 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
