[Linux] 让我迷上 CRON 时间格式和执行间隔的要点
你好。
我叫宫崎,来自系统解决方案部门,最近获得了 AWS 和 GCP 资格。
我的 LPIC(202 年之前的目标)是 000。
这次我想写一下我在设置CRON的时间格式和执行间隔时遇到的点。
CRON 时间格式
首先,可以用CRON指定的时间和日期如下。
参考: CRONTAB 的手册页
场地 | 可能的值 |
分钟 | 0-59 |
时间 | 0-23 |
该月的某一天 | 1-31 |
月 | 1-12 |
星期几 | 0-7 |
下面基于此给出一个设置示例。
# 在 04:00 0 4 运行 db_backup.sh * * * /home/centos/db_backup.sh
# 每 30 分钟 rsync */30 * * * * /home/centos/rsync.sh
# 每月15日计数 * * 15 * * /home/centos/count.sh
# 每周一删除文件 * * * 1 * /home/centos/delete.sh
# 每分钟运行 * * * * * /home/centos/1hunoki.sh
是这样的。
我确信还有很多其他的事情,但这次我着迷的是每隔 45 分钟执行一次。
每 45 分钟跑步一次
现在,如果我想每 45 分钟运行一次 shell 脚本,我应该如何设置呢?
起初,我尝试设置它,因为我认为它会起作用。
#每45分钟运行一次*/45 * * * * /home/centos/45hunoki.sh
是的,这是不正确的。
检查 cron 日志
[root@test-server ~]# cat /var/log/cron Sep 21 19:45:01 test-server CROND[3890]: (root) CMD (/home/centos/45hunoki.sh) Sep 21 20:00 :01 测试服务器 CROND[3894]: (root) CMD (/home/centos/45hunoki.sh) Sep 21 20:45:01 测试服务器 CROND[3899]: (root) CMD (/home/centos/45hunoki .sh)
运行时间为 00 分和 45 分钟。为什么··
这样做的原因是“*/45”中的“*/”没有考虑到0到24小时之间的所有“分钟”。
这种说法很难理解。
换句话说,你思考的不是 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到00分钟、45分钟每3小时执行一次
・从1:00到22:00每3小时30分钟执行一次
・从2:00到23:00每3小时15分钟执行一次
分钟 | 00 | 15 | 30 | 45 |
0 点 | 00:00 | 00:45 | ||
1点钟 | 1:30 | |||
2点钟 | 02:15 | |||
3点钟 | 03:00 | 03:45 | ||
4点钟 | 04:30 | |||
5点钟 | 05:15 |
如果您查看该表,您可以看到规律性,无论是每 40 分钟还是每 50 分钟。
概括
*/45 我很尴尬,因为我以为这样就可以了。
当我再次观看MAN时,我注意到了很多事情。
我推荐它是因为一旦你尝试把它写在纸上,你就会很容易注意到其中的规律性。
就是这样。