系统管理:任务计划(0620020000)

ぃ、小莉子 提交于 2021-01-13 17:24:15

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 可以执行周期 计划任务

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!