计划任务
at和crontab的最小时间单位都是分钟
单一计划任务
at
at命令:编辑临时性执行任务
指令格式:at 选项 时间
任务命令 Ctrl和D
1)at中使用绝对路径来执行命令(或表达文档路径)
//at运行时,默认到当初执行at命令的工作目录下执行任务命令
2)at的执行与终端环境无关
//且所有标准输出/标准错误输出都会发送到执行者的mailbox中
选项 | 含义 |
---|---|
-f | 指定运行的Shell文件路径(无需指定任务命令) |
-m | 任务完成后即使没有输出,也会通过邮件通知执行者 |
-M | 任务完成后不论有没有输出,都不通过邮件通知执行者 |
时间参数 | 含义 |
---|---|
HH:MM | 当天的HH:MM时刻执行 如:04:00 若指定的时间为过去的时间,则明天执行 |
HH:MM YYYY-MM-DD | 指定在某年某月的某一天执行 如:04:00 2021-04-18 |
HH:MM [am|pm] [Month] [Date] | 指定在某年某月的某一天执行 如:04am April 18 |
HH:MM [am|pm] + N [minutes|hours|days|weeks] | 指定在HH:MM时间后的N时间单位执行 如:04pm + 5 minutes |
//若表示当前时间可用“now”,如:now + 5minutes
如:在当前时间的五小时后列出/root目录下的文档
//执行at后会进入at shell环境中,可在
指令格式2:at 选项
选项 | 含义 |
---|---|
-l | 列出当前主机上at任务列表 |
-c N | 查看指定任务号N的具体内容 |
-d N | 删除指定任务号N的at任务 |
//-l和-d选项分别和atq和atrm命令有相同的效果
如:查看6号任务的具体内容
atq命令:列出当前用户at的任务列表
指令格式:atq
1)若用户为root,则列出当前主机上所有at任务列表
如:查看当前主机at任务列表
//内容构成:任务号 执行时间 执行者
atrm命令:删除指定任务号N的at任务
指令格式:atrm N
如:删除7号任务
配置
at权限:通过黑、白名单限制用户设置计划任务的权限
(1)先查找/etc/at.allow文件(白名单,默认不建立),若存在该文件,则在该文件中的用户可使用at
//不在该文件中的用户都不可使用(即使不在/etc/at.deny文件也不可)
(2)再查找/etc/at.deny文件(黑名单,默认建立),在该文件中的用户都不可用at,而不在的用户都可使用
(3)若两个文件都不存在,则仅有root用户可使用at
1)编辑两个时文件(添加用户名)以行为单位,一行一个
2)白名单的优先级高于黑名单
3)默认允许所有用户使用at
at命令实现的本质是通过atd服务:at命令将任务命令以文本文件的方式写入/var/spool/at目录内,在指定时间时atd服务执行指定文件
1)并不是所有的Linux发型版都默认启动atd服务
2)atd服务可实现断网继续执行任务,因为系统默认将at任务独立出bash环境,直接交给系统的atd服务处理
batch命令:在系统有空时执行指定任务
指令格式:batch 选项
任务命令 Ctrl和D
1)用法同at,但不支持时间参数;且任务操作也属于at任务
2)系统有空:CPU的任务平均负载小于0.8时
//CPU负载指的是CPU单一时间所负责的任务数量(而不是CPU使用率)
循环计划任务
Linux系统就具有很多的循环计划任务,如:
1)执行日志文件的论循(logrotate)
//Linux系统会主动将系统运行时的各种信息都记录下来形成“日志文件”
2)日志文件分析logwatch的任务
//Centos中的logwatch会主动分析登录信息等,并发送Email给root
3)建立locate的数据库
//系统通过updatedb命令实现自动更新该数据库
4)manpage查询数据库的建立/更新
//通过系统计划任务自动建立/更新数据库
5)RPM软件日志文件的建立
//记录软件的安装、更新和修改等信息形成软件日志文件
6)删除缓存
//软件运行时会产生缓存,但该缓存在软件关闭后不会主动被删除
Linux就通过tmpwatch命令删除这些缓存1、
系统执行的循环计划任务数量与安装软件的多少有关
用户计划任务
crontab命令:编辑用户周期性执行任务
指令格式:crontab 选项
1)crontab中使用绝对路径来执行命令(或表达文档路径)
//crontab运行时,默认去对应的计划任务列表文件中查找
2)若不带任何选项,则默认直接编辑计划任务(类似at命令编辑形式)
选项 | 含义 |
---|---|
-e | 编辑计划任务列表 |
-u | 指定用户 (若不指定,则默认为当前用户) |
-l | 列出计划任务列表 |
-r | 删除计划任务列表 |
3)crontab执行的每一项任务都会被记录到“/var/log/cron”日志文件中
4)-r选项是将计划任务列表全部删除
//而删除某个计划任务则需通过-e选项进行编辑删除
5)编辑计划任务语法:以行为单位,一行即为一个任务
分时日 月 周 执行命令
如:计划每天的00:00系统自动重启
单位 | 取值范围 |
---|---|
分 | 0~59 |
时 | 0~23 |
日 | 1~31 |
月 | 1~12 |
周 | 0~7 (0和7都表示星期天) |
1)单位的取值必须为正整数
2)周与日不可同时设置,会导致周或日其中一个满足就开始执行
且分钟必须有数值(不能为空或“*”)
符号 | 含义 |
---|---|
* | 代表取值范围内的所有数字 |
- | 链接两个数字,形成区间表达式 如:1至7为:1-7 |
/ | 代表每间隔N个单位 如:每隔10单位执行一次:*/10 |
, | 连接多个数字,形成多选值 如:选一三五为:1,3,5 |
如:设置当前主机的计划任务
每月1、10、22日的4:55重启network服务:
554 1,10,22 * * service network restart
每周六、日的1:10重启network服务
101 * * 6,0 service network restart
每天18:00至23:00之间每隔30分钟重启network服务
*/30 18-23 * * * service network restart
每隔两天的8:00至11:00的每第3分钟和15分钟执行一次重启
3,15 8-11 */2 * * reboot
配置
crontab权限:通过黑、白名单限制用户设置计划任务的权限
(1)先查找/etc/crontab.allow文件(白名单,默认不建立)
若存在该文件,则在该文件中的用户可使用crontab
不在该文件中的用户都不可使用(即使不在/etc/crontab.deny文件也不可)
(2)再查找/etc/crontab.deny文件(黑名单,默认建立)
在该文件中的用户都不可用crontab,而不在的用户都可使用
(3)若两个文件都不存在,则仅有root用户可使用at
1)编辑两个时文件(添加用户名)以行为单位,一行一个
2)白名单的优先级高于黑名单
3)默认是允许任何用户使用crontab
crontab命令实现的本质是通过crond服务:crontab命令根据指定用户名将计划任务命令以文本文件的方式写入/var/spool/cron/用户名(每个用户都有独立的文件)文件内,在指定时间时atd服务执行指定文件
1)所有的Linux发型版都默认启动crond服务
//因为Linux系统上具有很多周期性系统计划任务
2)不能使用Vim直接编译该文件,会导致语法错误(使crond不能执行)
其他计划任务
系统计划任务:通过编辑/etc/crontab文件实现系统计划任务
1)编辑方式同cronteab -e,但必须指定执行身份
2)/etc/crontab文件记录系统计划任务,且是一个纯文本文件
1)系统默认的计划任务是以root身份执行
2)crond服务的最低检测限制是分钟,crond会每分钟去读取一次/var/spool/cron
目录下和/etc/crontab文件中的所有数据内容
软件计划任务:通过配置/etc/cron.d目录实现软件计划任务
1)/etc/cron.d目录:放置crontab的配置文件脚本
//开发的新软件,若想拥有自己的计划任务,就需将该软件的计划任务配置文件放置到/etc/cron.d/目录下
run-parts脚本:在每小时的前5分钟内随机一个时间点去执行/etc/cron.hourly目
录下所有的执行文件,所以放置在/etc/cron.hourly目录的文件必
须是可被直接执行的命令脚本
/etc/cron.hourly目录:存放anacron相关的可执行文件
anacron
anacron程序:用于处理非24小时运行的Linux系统所执行的计划任务
以及一些超过时间而没被执行的计划任务
1)anacron属于程序和命令,不属于服务(不能使用服务命令管理)
2)anacron默认每小时会被crond执行一次
//且anacron默认以1天、7天和一个月为期去检测系统未执行的crontab任务
3)脚本文件/etc/cron.daily、/etc/cron.weekly和/etc/monthly都是被anacron调用的
//不依靠cron服务,且只需修改/etc/anacrontab文件就可实现不同效果
/etc/cron.hourly/0anacron:实现anacron每小时被执行一次的本质
//anacrontab前的“0”为实现cron.hourly目录下最先执行的文件使anacron的时间戳最先更新,防止出现时间参数误判
/etc/anacrontab:anacron的配置文件
内容构成:天数 强制延迟时间 自定义任务名称 实际任务命令
//天数的单位为“天”,最大随机延迟时间的单位为“分钟”
第一行:每天开机的5分钟后检查/etc/cron.daily目录下文件是否被执行
若当天没被执行,则计划执行该文件
第二行:每隔7天开机的25分钟后检查/etc/cron.weekly目录下文件是否被执行
若7天内都没被执行,则计划执行该文件
第三行:每隔1个月开机的45分钟后检查/etc/cron.monthly目录下文件是否执行
若1个月内都没被执行,则计划执行该文件
如:/etc/cron.daily的执行流程
1)读取/var/spool/anacron/cron.daily文件中anacron上一次执行的时间
2)读取时间与当前时间比较,若差值超过1天,就执行cron.daily
3)但cron.daily仅能在03:00~22:00时间段执行
4)执行时的强制延迟时间为5分钟,再随机延迟0~最大随机延迟时间(0~45)
5)使用nice命令指定默认优先级;再使用run-parts脚本执行/etc/cron.daily目录
下的所有可执行文件,执行完成后退出anacron程序
//同理/etc/cron.weekly、/etc/cron.monthly
anacron命令:处理执行时间到了却没有执行的计划任务
指令格式:anacron 选项
选项 | 含义 |
---|---|
-u | 更新记录文件的时间戳,但不执行任何任务 |
-s | 根据/etc/anacrontab中设定的延迟时间顺序执行任务 |
-n | 立即执行/etc/anacrontab中的所有任务,忽略所有延迟时间 |
-f | 强制执行所有任务,忽略时间戳 |