crontab 定时任务从入门到精通:10 道经典练习题详解
在 Linux 系统运维、自动化脚本开发中,at命令是在指定时间内只能执行一次任务,crontab命令可以循环重复的执行定时任务是最常用的定时任务工具,无论是服务器日志清理、数据备份,还是日常脚本执行,都离不开它的加持。很多同学在学习 crontab 时,总觉得语法简单但一到实际场景就出错,尤其是面对「按月份、按星期、间隔执行」等复杂需求时,经常踩坑。本文就以10道经典crontab作业题为核心,
目录
一、前言
在 Linux 系统运维、自动化脚本开发中,at命令是在指定时间内只能执行一次任务,crontab命令可以循环重复的执行定时任务 是最常用的定时任务工具,无论是服务器日志清理、数据备份,还是日常脚本执行,都离不开它的加持。
很多同学在学习 crontab 时,总觉得语法简单但一到实际场景就出错,尤其是面对「按月份、按星期、间隔执行」等复杂需求时,经常踩坑。
本文就以10道经典crontab作业题为核心,逐一讲解,所以代码可直接复制,帮你彻底吃透crontab。
crontd服务
crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操作系统后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的,若需要安装则执行如下命令:
[root@server ~]# yum install crontabs # 安装,注意包名
[root@server ~]# systemctl status crond # 查看状态
二、crontab命令详解
* * * * *
| 字段 | 顺序 | 取值范围 | 说明 |
|---|---|---|---|
| 分钟 | 第 1 位 | 0-59 | 任务执行的分钟数 |
| 小时 | 第 2 位 | 0-23 | 任务执行的小时数(24 小时制) |
| 日期 | 第 3 位 | 1-31 | 任务执行的日期 |
| 月份 | 第 4 位 | 1-12 | 任务执行的月份 |
| 星期 | 第 5 位 | 0-7(0 和 7 均为周日) | 任务执行的星期 |
| 命令 | 第 6 位 | - | 要执行的脚本 / 命令 |
2. 特殊符号详解(初学者最容易错的点,重点)
| 符号 | 含义 | 示例 |
|---|---|---|
* |
代表「任意值」,即该字段所有取值都生效 | * * * * * 表示每分钟执行 |
, |
代表「多个离散值」,用逗号分隔多个时间点 | 0 8,9 * * * 表示 8 点、9 点各执行一次 |
- |
代表「连续范围」,用横杠连接起止值 | 1-5 表示周一到周五 |
/ |
代表「间隔」,/n 表示每隔 n 个单位 |
*/2 * * * * 表示每隔 2 分钟执行 |
crontab [-u user] [-l| -r | -e]
参数:
| 参数 | 解释 | 示例 |
|---|---|---|
| -l | list 查看定时任务 | crontab -l |
| -e | edit 编辑定时任务,建议手动编辑 | crontab -e |
| -i | 删除定时任务,提示用户确认删除,避免出错 | crontab -i |
| -r | 删除定时任务,移除/var/spool/cron/username文件 | crontab -r |
| -u user | 指定用户执行任务,root 可以管理普通用户计划任务 | crontab -u redhat -l |
注:执行crontab 命令就是在修改 /var/spool/cron 中的定时任务文件。
三、10道练习题
1. 在4月份的周一到周三的上午11点执行脚本
2. 每天早上7点到上午11点且每2小时执行一次
3. 每天6点执行脚本
4. 每周六凌晨4点执行
5. 每周六凌晨4点05执行
6. 每天8:40执行
7. 在每天10:31且每隔2小时执行一次
8. 每周一到周五2:00执行
9. 每周一到周五8:00和9:00执行
10. 每天10:00,16:00执行
编写crontab
[root@localhost ~]# crontab -e
编写脚本test1.sh(这里是根据题目要求举个例子)
[root@localhost ~]# vim test1.sh
接下来一一讲解:
注意:阅读这种题目最好从后往前去一一解析。
题目1.在4月份的周一到周三的上午11点执行脚本。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
整点 11 任意 4 1-3
对应:
0 11 * 4 1-3
代码展示:
0 11 * 4 1-3 /root/test1.sh
题目2. 每天早上7点到上午11点且每2小时执行一次。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
整点 7-12且每2执行 每天 任意 任意
对应:
0 7-12/2 * * *
代码展示:
0 7-12/2 * * * /root/test1.sh
题目3. 每天6点执行脚本。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
整点 6 每天 任意 任意
对应:
0 6 * * *
代码展示:
0 6 * * * /root/test/test1.sh
温馨提示:
经过前面 3 道题的详细拆解,相信大家已经掌握了 crontab 表达式的核心写法。为了避免内容冗余、提升阅读体验,后面的题目我会直接给出最终表达式 + 核心解析,大家也可以先自己动手写一写,再对照答案查漏补缺~
题目4. 每周六凌晨4点执行。
* * * * *
分 时 天 月 周
对应:
0 4 * * 6
代码展示:
0 4 * * 6 /root/test/test1.sh
题目5. 每周六凌晨4点05执行。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
对应:
5 4 * * 6
代码展示:
5 4 * * 6 /root/test/test1.sh
题目6. 每天8:40执行。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
对应:
40 8 * * *
代码展示:
40 8 * * * /root/test/test1.sh
题目7. 在每天10:31且每隔2小时执行一次。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周 这里注意每隔---用 / 表示 不要忘了!
小时范围0-23
对应:
31 10-23/2 * * *
代码展示:
31 10-23/2 * * * /root/test1.sh
避坑提示:
- 易错点 1:误写为
31 */2 10 * * *,逻辑完全错误。 - 易错点 2:步长范围不写起止,直接写
*/2,会导致从 0 点开始执行。
题目8. 每周一到周五2:00执行。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
对应:
0 2 * * 1-5
代码展示:
0 2 * * 1-5 /root/test1.sh
题目9. 每周一到周五8:00和9:00执行。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
对应:
0 8 9 * * 1-5
代码展示:
0 8,9 * * 1-5 /root/test1.sh
避坑提示:
- 易错点 1:误写为
0 8-9 * * 1-5,会导致 8-9 点每分钟执行一次。 - 易错点 2:逗号前后加空格,必须写为
8,9,不能加空格。
题目10. 每天10:00,16:00执行。
首先我们先来逐字段分析:
* * * * *
分 时 天 月 周
对应:
0 10 16 * * *
代码展示:
0 10,16 * * * /root/test1.sh
避坑提示:
- 易错点:逗号前后加空格,必须写为
10,16,不能加空格。
四、总结
本文从 crontab 基础语法出发,以 10 道经典作业题为载体,完整拆解了每道题的表达式、逻辑、避坑点,常见坑解决方案,无论是完成作业、学习 Linux,还是运维实战,都能直接复用。
掌握 crontab,是 Linux 运维、自动化开发的必备技能,希望本文能帮你彻底吃透这个工具!
学习 Linux 定时任务的过程中,踩坑是难免的,多练习、多验证才能真正掌握。如果这篇文章对你有帮助,欢迎点赞收藏,也欢迎在评论区交流学习心得~
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)