Linux任务计划
一次性任务计划:at、batch
周期性任务执行:cron
at 一次性任务计划
可执行at命令的用户清单:/etc/at.allow 白名单清单(默认不存在);/etc/at.deny 黑名单清单(at.allow优先)
当at.allow存在时,为白名单模式,at.deny文件失效,写入/etc/at.allow的用户才能执行at命令
当at.allow不存在,at.deny存在时,为黑名单模式,写入at.deny的用户不能执行at命令,未写入的都可以
如果两个文件都不存在,只有 root 可以执行 at 命令
执行方式:
1)交互式 2)输入重定向 3)at –f 文件
依赖与atd服务,需要启动才能实现at任务
at队列存放在/var/spool/at目录中
/etc/at.{allow,deny}控制用户是否能执行at任务
at命令:at [option] TIME(ctrl+d结束)
常用选项:
-V 显示版本信息:
-l: 列出指定队列中等待运行的作业;相当于atq
-d: 删除指定的作业;相当于atrm
-c: 查看具体作业任务
-f /path/from/somefile:从指定的文件中读取任务
-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
TIME:定义出什么时候进行 at 这项任务的时间
HH:MM [YYYY-mm-dd]
tomorrow
now+#{minutes,hours,days, OR weeks}
时间示例:
at 20:00(最近的20点) at now+2 minutes (2分钟以后) at 17:20 tomorrow at 11:00 +2 days at 11:00 2018-7-1
选项示例:
at now+2 minutes #交互式创建2分钟后的临时任务 at> wall hello #任务内容,向终端发送hello,wall命令:向终端发送内容 at> <EOT> #结束任务写入,ctrl+d at -l #查看等待执行的任务清单 1 Fri Jan 8 11:30:00 2021 a root at -c 1 #查看第一条定时任务内容 wall hello #任务内容,前面会显示很多环境变量内容 at -d 1 #删除第一项任务
举例:配置一个计划任务,在后天晚上11点对/etc/下所有文件备份至/tmp/日期名为名的目录下。
at 23:00 +2 days at> cp -r /etc /tmp/$(date +%F) at> <EOT>
cron 周期性任务计划
相关的程序包:
cronie: 主程序包,提供crond守护进程及相关辅助工具(默认安装rpm -qa cron*)
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
主程序:crond(开机运行状态),计划周期性执行的任务提交给crond,到指定时间会自动运行
CentOS 7: systemctl status crond
任务配置文件:
系统cron任务:系统维护作业
/etc/crontab
用户cron任务:crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME
crontab #使用命令配置
crontab命令:用户计划任务
crontab [-u user] [-l | -r | -e] [-i]
-l: 查看用户的计划任务;
-e: 编辑(设置)用户的计划任务;
-r: 删除指定用户的全部计划任务;
-i:同-r一同使用,以交互式模式移除指定任务
-u user: 仅root可运行,指定用户管理cron任务,不指默认当前用户
crontab -u lisi -e (编辑lisi的计划任务) crontab -l -u lisii (查看lisi的计划任务)
crontab -e #编辑当前用户的计划任务(默认打开一个vim编辑器)
分 时 日 月 周 用户(不指定默认当前) 命令(man 5 crontab) 00 08 * * 1-3,5 /usr/bin/wall "GOOD Morning" #每个周1/2/3/5 闹钟 30 21 * * * /usr/sbin/poweroff #每天晚上21点30分关机 */10 15-17 1 * /usr/sbin/echo hello #每个月1号下午15点到17点每隔10分钟输出hello #10表示每个小时的第10分;*/10表示每隔10分。当日期与周同时定义时,则表示两个时间都可以,为或的关系。 crontab -l #查看定时任务(或在目录/var/spool/cron/中查看)
注:使crontab -e 有颜色方法:export EDITOR=vim
系统级的计划任务
vim /etc/crontab #将计划写入该文件中,与用户级计划任务格式一致
其它计划任务配置方式
cd /etc/cron.d #扩展配置文件(见后文总结)
计划任务示例:
配置一个计划任务,每2小时给root发一封邮件,内容为当前时间点磁盘空间的使用率最高的前2个分区,及磁盘占用百分比
1.vim /app/bin/cron_mail.sh #创建任务脚本 #!/bin/bash df |grep /dev/sd |tr -s " " |sort -t" " -k5 -rn|head -2 |cut -d" " -f1,5 |mail -s "diskusage report at $(date "+%F %T")" root chmod +x /app/bin/cron_mail.sh 2.crontab -e #也可使用系统级的计划任务 */1 * * * * root /app/bin/cron_mail.sh (将上述脚本写入计划文件中)
时间表示法:
(1) 特定值
给定时间点有效取值范围内的值 (如 时:10 表示10点)
(2) *
给定时间点上有效取值范围内的所有值 (如 时 * 表示一天的每一点,相当于不定义)
表示“每...”
(3) 离散取值
#,#,# (如 时 2,6,8 表示某一天的2,6,8点)
(4) 连续取值 #-# (如 时 2-8 表示某一天的2点到8点)
(5) 在指定时间范围上,定义步长
* /#: #即为步长 (如 时 */2 表示步长为2,为每隔2小时)
秒级别运行任务
* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done (在一分钟内循环)
周期计划任务方法总结
1.用户计划任务(计划任务位置:/var/spool/cron/username)
crontab -e
2.系统计划任务主配置
vim /etc/crontab/
3.系统计划任务的扩展配置文件
cd /etc/cron.d/ #扩展配置文件目录1 cat /etc/cron.d/0hourly #扩展配置文件1 01 * * * * root run-parts /etc/cron.hourly #定义了定时任务,执行cron.hourly目录下的脚本,run-parts为特殊命令 ls /etc/cron.hourly/0anacron #脚本 cat /etc/anacrontab #扩展配置文件2 1 5 cron.daily nice run-parts /etc/cron.daily #定义了定时任务,执行cron.daily目录下的脚本 7 25 cron.weekly nice run-parts /etc/cron.weekly #定义了定时任务,执行cron.weekly目录下的脚本 @monthly 45 cron.monthly nice run-parts /etc/cron.monthly #定义了定时任务,执行cron.monthly目录下的脚本 #重试的周期(每7天执行) #重试的间隔 (每25分钟执行一次) #优先级(低) #运行命令 #运行的脚本目录(定时任务含义,第二行为例)
共4个脚本目录如下
/etc/cron.hourly 扩展配置文件1调用 /etc/cron.daily 扩展配置文件2调用 /etc/cron.weekly 扩展配置文件2调用 /etc/cron.monthly 扩展配置文件2调用
文件清单:
ls /etc/ |grep "cron" anacrontab #扩展配置文件2 cron.d #扩展配置目录1 cron.daily #扩展配置文件2调用的脚本目录 cron.deny #计划任务黑名单 cron.hourly #扩展配置文件1调用的脚本目录 cron.monthly #扩展配置文件2调用的脚本目录 crontab #系统主配置文件 cron.weekly #扩展配置文件2调用的脚本目录
周期计划任务黑白名单
/etc/cron.allow 白名单清单(默认不存在); /etc/cron.deny 黑名单清单,默认存在(cron.allow优先)
当cron.allow存在时,为白名单模式,cron.deny文件失效,写入/etc/cron.allow的用户才能执行周期计划任务
当cron.allow不存在,cron.deny存在时,为黑名单模式,写入cron.deny的用户不能执行周期计划任务,未写入的都可以
如果两个文件都不存在,只有 root 可以执行周期 计划任务
来源:oschina
链接:https://my.oschina.net/u/4844418/blog/4897263