# 04.Linux-crond 任务调度

# 1.crontab

1.基本介绍 任务调度:是指系统在某个时间执行特定的命令或程序。

任务调度分类: (1)系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等 (2)个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。

2.定时任务的占位符说明

在定时任务中需要用来描述什么时间执行的占位符,他们分别有着不同的含义

正常情况下有5个占位符,用*表示,含义如下

项目 含义 范围
第一个 * 一小时当中的第几分钟 0-59
第二个 * 一天当中的第几小时 0-23
第三个 * 一个月当中的第几天 1-31
第四个 * 一年当中的第几月 1-12
第五个 * 一周当中的星期几 0-7(0 和 7 都代表星期日)

特殊情况说明

特殊符号 含义 示例
* 代表任何时间 第一个 * 代表一小时中每分钟都执行一次
, 代表不连续的时间 0 8,12,16 * * * 代表每天 8:00、12:00、16:00 执行
- 代表连续的时间范围 0 5 * * 1-6 代表周一到周六的 5:00 执行
*/n 代表每隔多久执行一次 */10 * * * * 代表每隔 10 分钟执行一次
1.基本语法
    crontab [选项]
    功能:进行定时任务的设置

2.常用选项
    -e 编辑定时任务
    -l  查看定时任务
     -r 删除定时任务
service crond restart:重启任务调度

3.快速入门
在/etc/下有一个crontab文件,在这个文件中写入所有的定时任务

输入crontab -e  就会进入crontab文件
然后在文件中写入定时任务:*/1 * * * * ls –l    /etc/ > /tmp/to.txt
意思说每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt 命令
最后保存退出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

3.应用案例

案例 1:每隔 1 分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
crontab -e
*/1 * * * * date >> /tmp/mydate


案例 2:每隔 1 分钟,将当前日期和日历都追加到 /home/mycal 文件中
    将 date >> /home/mycal 和  cal >> /home/mycal 命令写在文件 /home/my.sh中
    就是将命令都写在shell脚本中,直接调用shell脚本

    步骤:
        vim /home/my.sh
        在my.sh中写入:
            date >> /home/mycal
            cal >> /home/mycal
            :wq
        给 my.sh 增加执行权限:chmod u+x /home/my.sh (否则无法使用crontab命令)
        crontab -e
        在crontab中写入:*/1 * * * *    /home/my.sh


案例 3:    每天凌晨 2:00  将 mysql 数据库 testdb 备份到文件中。
提示: 指令为 mysqldump -u root -p密码 数据库 > /home/db.bak
步骤(1) crontab -e
步骤(2) 0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 2.at

1.基本介绍 (1) at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行; (2) 每个作业队列(任务队列)中都有作业(作业里是指令/脚本); (3) 默认情况下,atd 守护进程每 60 秒检查作业队列; 有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业; 运行完这个作业(任务)之后,这个作业就不会再被执行了; (4) 在使用 at 命令的时候,一定要保证 atd 进程的启动,可以使用相关指令来查看 ps -ef | grep atd //可以检测 atd 是否在运行 ps -ef ---> 查看所有的进程

总结:at命令就是对某个定时任务只执行一次

2.at 命令格式

at [选项] [时间]
然后输入两次:Ctrl + D    (结束 at 命令的输入)令选项:
1
2

3.at选项

选项 含义
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-I atq 的别名(用于查询待执行的任务队列)
-d atrm 的别名(用于删除待执行的任务)
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q <队列> 使用指定的队列
-f <文件> 从指定文件读入任务而不是从标准输入读入
-t <时间参数> 以时间参数的形式提交要运行的任务

4.at 指定时间的方法:

(1) 接受在当天的 hh:mm(小时:分钟)式的时间指定。 假如该时间已过去,那么就放在第二天执行。 例如:04:00 (2) 使用 midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午 4 点)等比较模糊的词语来指定时间。 (3) 采用 12 小时计时制,即在时间后面加上 AM(上午)或 PM(下午)来说明是上午还是下午。 例如:12pm (4) 指定命令执行的具体日期,指定格式为 month day(月 日)或 mm/dd/yy(月/日/年)或 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2021-03-1 (小的时间写前面,大的时间写后面) (5) 使用相对计时法。 指定格式为:now + count time-units now 就是当前时间,time-units 是时间单位,这里能够是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。 count 是时间的数量,几天,几小时。 例如:now + 5 minutes (6) 直接使用 today(今天)、tomorrow(明天)来指定完成命令的时间。

5.应用案例

5.应用实例
案例 1:2 天后的下午 5 点执行 /bin/ls /home
    at 5pm + 2 days
    /bin/ls /home
    两次ctrl+D

案例 2:atq 命令来查看系统中没有执行的工作任务
    直接输入atq 查询

案例 3:明天17点钟,输出时间到指定文件内 比如 /root/date100.log
    at 5pm tomorrow
    date > /root/date100.log
    两次ctrl+D

案例 4:2分钟后,输出时间到指定文件内 比如 /root/date200.log
    at now + 2 minutes
    date > /root/date200.log
    两次ctrl+D

案例 5:删除已经设置的任务
    atrm 任务编号
    atrm 4 //表示将 job 队列,编号为 4 的 job 删除.

    atq:
    2    Thu Feb 24 09:53:00 2022 a root
    1    Fri Feb 25 17:00:00 2022 a root
    第一列就是编号


注意:也可以执行脚本
比如:
    at now +2 minutes
    /root/my.sh  
    但要有这个脚本,并且有执行权限x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
最近更新: 9/19/2026, 1:27:08 PM
04.Linux-crond 任务调度

编程NOTE   |