计划任务的作用是:做一些周期性的任务,目前最主要的用途是定期备份数据。
计划任务主要分为一次性调度执行at和循环调度执行cron,下面我就围绕着at和cron来讲解。
at一次性调度的语法格式是:at timespec
timespec示例:一:at now +1min 一分钟后执行计划任务
二:at 16:00 tomorrow 明天下午16点执行
三:at 10:00 1/1/2021 (在2021年的1月1日上午十点执行)
四:at 10:00 AM tomorrow (在明天上午10点执行)
五:at 10:00 +4 days (在四天后的上午十点执行)
at 查询任务的语法是:atq
at 删除任务的语法是:atrm 任务ID
下面是实测环节,设置两个定时创建用户的任务,一个1分钟后创建,一个明天创建,查询任务,验证结果,把明天创建用户的任务删除。
[root@localhost ~]# at now +1 min //at命令在1分钟后创建一个用户qqt
at> useradd qqt //
at> //按Ctrl+d结束
job 4 at Tue Aug 11 01:34:00 2020 //
[root@localhost ~]# at now +30 min //at命令在30分钟后创建一个用户bbt
at> useradd bbt //
at> //
job 5 at Tue Aug 11 02:03:00 2020 //
[root@localhost ~]# atq //查看计划任务列表
4 Tue Aug 11 01:34:00 2020 a root //
5 Tue Aug 11 02:03:00 2020 a root //
[root@localhost ~]# id qqt //查看qqt用户
uid=1675(qqt) gid=1675(qqt) 组=1675(qqt)
[root@localhost ~]# atq
5 Tue Aug 11 02:03:00 2020 a root
[root@localhost ~]# atrm 5 //删除任务号5的计划任务
[root@localhost ~]# atq //查看下任务列表还有没有任务5的计划任务
cron的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“/etc/crontab”文件中,以供之后读取和执行。
crond程序运行是计划任务执行的根本,因此首先要查看crond状态命令在下面
[root@localhost ~]# systemctl status crond.service
cron管理方式有三种,创建计划,查询计划,删除计划,分别是以下三条命令;注:管理员可以使用 -u username, 去管理其他用户的计划任务;计划任务存储位置在/var/spool/cron/中
[root@localhost ~]# crontab -e //创建计划任务
[root@localhost ~]# crontab -l //查询计划任务
[root@localhost ~]# crontab -r //删除计划任务
cron语法格式是:
| .------------- 分钟 (0 - 59)
| | .---------- 小时(0 - 23)
| | | .------- 日(1 - 31)
| | | | .---- 月(1 - 12) OR jan,feb,mar,apr ...
| | | | | 周(0 - 6) (周日=0 or 7)
* * * * * 命令
示例:0 * * * * /mysql_back.sh 每小时的0分执行 0 2 1,4,6 * * /mysql_back.sh 每月的1,4,6日的2点整执行
*/5 * * * * /mysql_back.sh 每五分钟执行 0 2 5-9 * * /mysql_back.sh 每月5日到9日的两点整执行
* * * * * /mysql_back.sh 每分钟执行 0 2 * * * /mysql_back.sh 每天两点整执行
0 2 14 * * /mysql_back.sh 每月14号的2点整执行 0 2 14 2 * /mysql_back.sh 2月14日2点整执行
0 2 * * 5 /mysql_back.sh 不写月日,仅周生效,每月的周五,两点执行
0 2 2 6 5 /mysql_back.sh 书写月和日,月或日,月日周均生效 6月2日的两点整执行和6月的周五两点整执行
示例,创建一个每隔一分钟执行创建文件的计划任务
[root@localhost ~]touch 9.sh //创建一个文件9.sh
[root@localhost ~]echo "/usr/bin/touch /root/`date +%F-%H-%M-%S`.txt">9.sh
//向9.sh中写入程序,/usr/bin/touch 这是一个创建文件命令,您也可以换成其他命令;/root/ 这是创建的文件存放的位置,存放在/root/下,您也可以更改;`date +%F-%H-%M-%S`.txt 这是创建文件的名称,%F等价于 %Y-%m-%d即年月日,%H-%M-%S是时分秒,.txt是文件名的一部分
[root@localhost ~]# chmod +x 9.sh //为文件9.sh加上执行权限
[root@localhost ~]# crontab -e //创建任务计划
* * * * * /root/9.sh //在任务计划中写上这段话,每分钟执行一次/root/9.sh这个命令
[root@localhost ~]# crontab -l //查看循环计划任务
* * * * * /root/9.sh
2020-08-11-02-21-02.txt //这是计划任务自动创建的文件
2020-08-11-02-22-01.txt
2020-08-11-02-23-01.txt
[root@localhost ~]# crontab -r //删除计划任务,否则他会一直自动创建文件。