目录

一、前言

crontd服务

二、crontab命令详解

2. 特殊符号详解(初学者最容易错的点,重点)

三、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执行。

四、总结


一、前言

在 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 定时任务的过程中,踩坑是难免的,多练习、多验证才能真正掌握。如果这篇文章对你有帮助,欢迎点赞收藏,也欢迎在评论区交流学习心得~

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐