概念
我们需要让Linux系统按照我们指定的时间自动的完成一些作业,例如在某个时间执行某个脚本,或者进行周期备份,这时候就可以制定计划任务了。计划任务分为一次性和周期性两类。
注意事项: 如果想要使用定时任务,首先要确保自己系统的时间格式,我们使用的是东八区时间,也就是北京时间,可以运行下边这条命令确认。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
一次性计划任务
就是执行一次就结束的任务,可以通过at或者batch命令生成
yum install at
systemctl restart at
使用方法:
at [option]...[TIME]
at命令后不能为空,必须接选项或参数
常用选项:
-d 作业编号:删除指定的待执行任务,相当于atrm
-l:显示待执行的任务的列表,相当于atq
-m:任务执行完成后向用户发送E-mail(默认)
-c 作业编号:显示指定作业的实际内容
TIME格式
HH:MM 如14:30
HH:MM YYYY-MM-DD 如14:30 2015-10-07
HH:MM[am|pm] [Month] [Date] 如02:30pm October 07
举例
如果我想要在2021年8月16号晚上11点关机。ctrl + D 保存并推出。退出后会显示
[root@base at]# at 23:00 2021-08-16
at> /usr/sbin/shutdown -h now
at> <EOT>job 1 at Sat Aug 16 23:00:00 2021
周期性计划任务
周期性计划任务将会一直执行下去,比如每分钟 每小时 每天 每周等等
由crontab这个服务控制
使用方法:
crontab
-u:管理员可为其他用户创建任务
-e:打开编辑页面定义任务
-l:列出已经定义的所有任务
-r:移除所有任务
crontab -e打开编辑页面后,一行一个任务进行编辑,每行包括6段,前5段为时间,最后一段为要执行的命令,格式如下:
分钟 小时 日 月 周几 命令
//通常表示时间技巧:
*:表示任何时刻都接受的意思,所有时间段位上不能同时为*
数字:表示具体某一小时某一分钟等,如 8 8 8 8 * 表示每年的8月8日8时8分
,:表示分隔时段,表示一段时间范围,如 8 9,13 * * * 表示每天9:08和13:08
*/: 在对应的时间位的有效取值上每#一次,如 */8 * * * * 表示每8分钟一次
-:某个时间位上的连续区间,如 10-50/8 * * * * 表示第10分和第50分之间每8分钟一次
例:
[root@base ~]# crontab -e
代表意义 分钟 小时 日期 月份 周
指令指令数字范围 0-59 0-23 1-31 1-12 0-7 就指令啊
假如现在有一个脚本为test.sh
1、每月每天每隔6小时的每30分钟执行test.sh脚本
0,30 */6 * * * ./test.sh
2、每月每天晚上21点30分执行test.sh脚本
30 21 * * * ./test.sh
3、每月1号、10号、22号凌晨4点45分执行test.sh脚本
45 4 1,10,22 * * ./test.sh
4、8月份周一、周日凌晨1点10分执行test.sh脚本
10 1 * 8 1,7 ./test.sh