版权声明:欢迎转载与交流。https://blog.csdn.net/one2more/article/details/90212471
一、前言
在Linux系统中,我们可以通过一些设置来让电脑定时提醒我们该做什么事了;或者我们提前设置好告诉电脑几点钟做什么。这种就叫做定时任务。而在日常的使用中遇到一些需要执行的事情或任务,我们也可以通过命令来告诉电脑在特定时间把一些特定的工作给做一下。
以上的这些情景在Linux中,我们可以通过crontab
和at
这两个工具来实现这些功能。
二、计划任务的作用
计划任务的作用:就是做一些周期性的任务,在生产中主要用来定期备份数据。
三、计划任务守护进程、调度分类及安排方式
1、守护进程
atd
和crond
这两个守护进程就是为了临时性或周期性地执行任务或处理等待事件而存在的。
2、调度分类
计划任务的调度分为两类:系统
任务调度和用户
任务调度。
3、计划任务的安排方式
定时性的
,也就是例行性的。每隔一定周期就要重复来做的事情。
突发性的
,也就是这次做完了这个事,就没有下一次了;临时决定,只执行一次的任务。
四、at和crontab这两个命令
1、at是一个可以处理仅执行一次就结束的指令。
2、crontab是会把你指定的工作或任务,按照你预先设定的周期一直循环执行下去。
五、今天讲at计划任务的使用
1、语法格式:at 时间
2、atd
服务的相关操作(开启start
|关闭/停止stop
|重启restart
|启动状态查看status
|开机自启动状态查看is-enabled
|设置开机自启动enable
|开机禁止自启动disable
)
[root@localhost ~]# systemctl stop atd #关闭/停止atd服务
[root@localhost ~]# systemctl start atd #开启atd服务
[root@localhost ~]# systemctl restart atd #重启atd服务
[root@localhost ~]# systemctl status atd #查看atd服务开启状态为running开启状态
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2019-05-14 16:40:17 CST; 1h 32min ago
Main PID: 586 (atd)
CGroup: /system.slice/atd.service
└─586 /usr/sbin/atd -f
5月 14 16:40:17 localhost.localdomain systemd[1]: Started Job spooling tools.
5月 14 16:40:17 localhost.localdomain systemd[1]: Starting Job spooling tools...
[root@localhost ~]# systemctl is-enabled atd #查看atd服务开机自启动状态为`enabled`(开启状态)
enabled
[root@localhost ~]# systemctl disable atd #设置atd服务开机自启动状态为`disabled`状态
Removed symlink /etc/systemd/system/multi-user.target.wants/atd.service.
[root@localhost ~]# systemctl is-enabled atd #查看atd服务开机自启动状态为`disabled`(关闭状态)
disabled
[root@localhost ~]# systemctl enable atd #设置atd服务开机自启动状态为`enabled`状态
Created symlink from /etc/systemd/system/multi-user.target.wants/atd.service to /usr/lib/systemd/system/atd.service.
[root@localhost ~]# systemctl is-enabled atd #查看atd服务开机自启动状态为`enabled`(开启状态)
enabled
3、at计划任务的特殊语法
[root@localhost ~]# at 20:00 2019-05-14 #在某天的特定时间执行
[root@localhost ~]# at now +10min #在10分钟后执行
[root@localhost ~]# at 17:00 tomorrow #在明天下午5点执行
[root@localhost ~]# at 6:30pm +3days #在3天后的下午6:30分执行
[root@localhost ~]# at 23:00 < a.txt #使用输入重定向的形式执行a.txt中预先写入的相关操作
4、查看at将要执行的计划任务列表
语法:at -l
或者 atq
[root@localhost ~]# atq
6 Fri May 17 18:30:00 2019 a root
#任务编号 将要执行的时间(计划执行的时间) 队列 执行者
注意:
此处只能查看到还没有执行的任务。如果任务已经开始执行或者执行完毕了,是查看不到的。
5、查看具体的任务内容
(1)使用at -c 任务编号
查看具体的任务内容(具体的执行在输出信息的最后)
[root@localhost ~]# at -c 6
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
......此处省略......
${SHELL:-/bin/sh} << 'marcinDELIMITER6d9dc38f'
echo 123
marcinDELIMITER6d9dc38f
(2)使用cat /var/spool/at/任务文件名称
查看具体任务内容
系统中所有的at计划任务都会存放在 /var/spool/at/ 目录下
[root@localhost ~]# ll /var/spool/at/
总用量 4
-rwx------. 1 root root 2786 5月 14 19:20 a00006018c3e16
drwx------. 2 daemon daemon 6 5月 14 19:27 spool
[root@localhost ~]# cat /var/spool/at/a00006018c3e16
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
......此处省略......
${SHELL:-/bin/sh} << 'marcinDELIMITER0589938d'
echo 123
marcinDELIMITER0589938d
(3)使用tail -3 /var/spool/at/a00006018c3e16
查看具体任务内容
[root@localhost ~]# tail -3 /var/spool/at/a00006018c3e16
${SHELL:-/bin/sh} << 'marcinDELIMITER0589938d'
echo 123
marcinDELIMITER0589938d
6、删除at计划任务
语法:atrm 任务编号
[root@localhost ~]# atq #系统中有一个编号6的计划任务
6 Fri May 17 18:30:00 2019 a root
[root@localhost ~]# atrm 6 #删除编号6计划任务
[root@localhost ~]# atq #无任何输出信息,系统中已经没有at计划任务了
[root@localhost ~]# ll /var/spool/at #该目录下已经没有记录任务的详细文件了
总用量 0
drwx------. 2 daemon daemon 6 5月 14 19:27 spool