延迟任务
知识点
1.延迟命令at
at 10:10
>rm -fr /mnt/* #任务内容
>[ctrl]+[d] #任务发起
at -l #查看任务队列
at -c 任务号 #查看任务内容
at -r 任务号 #取消任务
注意: 当延迟任务有输出时,输出会以邮件形式发送到任务发起者的邮箱中。
比如:
at 10:30
timedatectl
此命令有输出,但不会显示到字符设备中,输出会用邮件发送给at发起人。
1.yum install mailx
2.yum install postfix
3.systemctl start postfix
4.systemctl enable postfix
5.mail #查看邮件
mail -u root #查看root用户的邮件
>N 1 #输出邮件1
& 1 #查看邮件1
& q #退出
6.>/var/spool/mail/root #清空用户root邮件
2.at命令的控制
(1)/etc/at.deny:at控制黑名单,此名单中的人不能执行at。
(2)/etc/at.allow:此文件默认不存在;当此文件存在时/etc/at.deny不生效;当此文件存在时,系统普通用户默认不能执行at,只有在名单中的人才可以。
实验:命令展示
1.at命令的效果
可以看到任务内容(最后几行)
消失时记录date(存在误差),发现/mnt/下文件被清空。
2.at命令的参数
3.发送邮件
(1)安装邮箱客户端mailx和邮件传输代理(MTA)postfix传送邮件
(2)开启邮件服务postfix
(3)发送邮件
mail root:给用户root发送邮件
点(.):表示输入结束
& 1:查看邮件1
& q:退出
(4)查看并清理邮件
4.当延迟任务有输出时
(1)先查看timedatectl延迟命令输出
输出不会显示到字符设备中
(2)检查timedatectl延迟命令是否以邮件形式发出
发现这个延迟命令会以邮件形式发送给at命令发起人,且邮件内容为这个延迟命令的输出。
5.at命令的控制
(1)未添加lll用户到/etc/at.deny之前
at now+1min:一分钟之后执行延迟命令rm -fr /mnt/*
rm -fr /mnt/*
此时用户lll和用户yyy均可执行at命令
(2)将用户lll放入/etc/at.deny中
发现用户lll不能执行at命令,而用户yyy仍可以执行at命令。
(3)进入/etc/目录,发现只有/etc/at.deny文件,/etc/at.allow文件默认不存在。
(4)将用户lll同样放入/etc/at.allow文件中
发现当/etc/at.allow文件存在时,/etc/at.deny默认不生效。
(5)检查用户yyy能否执行at命令
由于用户yyy没有在/etc/at.allow文件中,所以用户yyy不能执行at命令。
定时任务
知识点
定时任务服务: crond
定时任务存储位置: /var/spool/cron/用户名
设定方式:
1.用户级别定时任务
1.crontab -u 用户名 -e #设定定时任务
2.crontab -u 用户名 -l #查看定时任务
3.crontab -u 用户名 -r #删除定时任务
设定方法:
✳:表示每天、月…
分钟 小时 天 月 周 系统命令或脚本 | 含义 |
---|---|
08-17 ✳ ✳ ✳ ✳ | 指定每小时的08-17分钟 |
08-17 ✳ ✳ ✳ 3,5 | 指定每周三和周五每小时的08-17分钟 |
08-17/2 ✳ ✳ ✳ 3,5 | 指定每周三和周五每小时的08-17分钟时间段每隔两分钟 |
08-17/2 10 ✳ ✳ 3,5 | 指定每周三和周五10点的08-17分钟时间段每隔两分钟 |
08-17/2 10 5 ✳ 3,5 | 指定每周三和周五及每月5号10点的08-17分钟时间段每隔两分钟 |
08-17/2 10 5 3 3,5 | 指定3月每周三和周五以及3月5号10点的08-17分钟时间段每隔两分钟 |
crontab控制设置:
/etc/cron.deny:cron用户黑名单(用法同at.deny)
/etc/cron.allow:cron用户白名单(用法同at.allow)
注意: 当定时任务有输出时,像at命令一样,crontab也会向命令发起人发送邮件。
2.系统级别定时任务
只有超级用户可设定
(1)文件存放路径: /etc/cron.d/文件名称(任意)
例如:/etc/cron.d/redhat
这种方式是用户自定义方式
设定方法:
| 分钟 小时 天 月 周 | 用户 | 动作 |
(2)其他几个文件:
/etc/cron.daily:每天任务
/etc/cron.hourly:每小时任务
/etc/cron.monthly:每月任务
/etc/cron.weekly:每周任务
实验
1.crontab -e
(1)在/mnt/下新建文件,同时新建bash对/mnt/下文件进行监控。
(2)设置crontab
(3)发现到指定时间后,rm -fr /mnt/*命令被执行。
2.crontab -r
(1)设定定时任务
(2)取消定时任务
发现设定的定时任务rm -fr /mnt/*不会执行
3.crontab发送邮件
(1)编辑timedatectl定时命令
(2)检查邮件
发现timedatectl定时命令并未显示到字符设备上,而是以邮件形式发送给crontab命令发起人。
4.crontab控制设置
(1)在修改/etc/cron.deny之前
发现用户lll和用户yyy均能使用crontab
(2)添加用户lll到/etc/cron.deny中
(3)检查用户lll能否使用crontab
发现用户lll不能使用crontab,而用户yyy可以使用crontab。
(4)检查文件/etc/cron.allow是否存在
/etc/cron.allow不存在
(5)添加用户lll到/etc/cron.allow中
(6)检查用户lll能否使用crontab
发现用户lll可以使用crontab,即/etc/cron.deny文件失效。
(7)检查用户yyy能否使用crontab
用户yyy不能使用crontab
5./etc/cron.d/redhat设定
(1)编辑/etc/cron.d/redhat文件
(2)检查/mnt/下文件
发现过整分钟后,/mnt/下所有文件被删除。
6./etc/cron.文件
(1)查看/etc/cron.开头文件
(2)例如进入/etc/cron.hourly目录编辑clean_mnt本
注意0anacron是检测crontab是否漏执行(比如说执行crontab -u xxx -e时系统是关着的,就会出现漏执行情况)的一个工具,当检测到漏执行时,0anacron就会执行漏执行的任务。
注意要给clean_mnt这个脚本执行权限,这样到整点的时候就会执行这个脚本,清空/mnt/下所有文件。