一、延迟任务(一次性的)
1. 延迟任务的设定
- at +时间 :具体时间设定延迟任务
设定成功后“ ctrl + d "发起任务," ctrl + c " 取消。
- at -l :查看延迟任务
- at -c 1 :查看序号为1 的延迟任务的内容
- at -r 1 :取消序号为1 的延迟任务
- at now+1min : 设定1分钟后的延迟任务
------------------------------------------------------实验------------------------------------------------------
准备虚拟机aa,打开两个窗口,一个做监控!!
# watch -n 1 ls -l /mnt/ :监控命令
在/mnt/下建立10个新文件
# at 16:59:在16:50设定延迟任务
at> rm -fr /mnt/* :清空/mnt/的文件
at> <EOT>:发起任务
# at -l : 查看延迟任务
# at -c 5 : 查看延迟任务的具体内容
# at -r 7 :取消延迟任务
2. at 任务的黑白名单
默认情况下,所有用户都可以执行延迟任务!
- /etc/at.deny:默认存在,再此文件中出现的用户不能执行at
- /etc/at.allow:默认不存在,当文件出现,/etc/at.deny失效;只有文件里的用户可以执行at
----------------------------------------------------------------实验-------------------------------------------------------
- /etc/at.deny:默认存在,
- /etc/at.allow:默认不存在
# man 5 at.deny :查询文件帮助
发现:如果at.allow文件存在就不再查看deny文件,如果allow文件不存在就查看deny文件!
默认情况下,所有用户都可以执行at。
编辑黑名单,将用户westos写进黑名单,发现westos无法执行at任务!!
建立白名单,白名单一旦建立,黑名单就会失效!只允许白名单内的用户和root用户执行at !!!白名单为空则只允许root用户执行!
二、定时任务的设定(永久的)
1. 用户定时任务的设定
(1)保存路径及系统服务
-
/var/spool/cron/username : 任务保存文件
-
crond.service :系统控制crontab的服务
(2)crontab 时间表示方式
- * * * * * :分别代表 分钟 小时 天 月 周,此时代表每分钟
- */2 * * * * :每两分钟
- */2 09-17 3,5 1 5 :1月的3号和5号,第五周的9点--17点,每隔2分钟执行一次!
(3) crontab 基本命令
- crontab -u root/westos -e : 编辑root/westos用户的定时任务
- crontab -u root/westos -l:查看root/westos用户的定时任务
- crontab -u root/westos -r:删除root/westos用户的定时任务
----------------------------------------------------实验-------------------------------------------------------
编辑定时任务的界面如下:
编辑完保存即可!!
(4)crontab的黑白名单
crontab的黑白名单与at的黑白名单类似,对root用户和系统级的定时无效!
- /etc/cron.deny : 黑名单,系统中默认存在,此文件中出现的用户不能执行crontab
- /etc/cron.allow : 白名单,系统中默认不存在,当文件存在,/etc/cron.deny失效!只有在文件里的用户及root可以执行crontab
----------------------------------------------------------------实验-------------------------------------------------------------
黑名单默认存在,白名单默认不存在!
默认情况下所有用户都可以执行crontab定时任务!
将westos用户写进黑名单,发现只有黑名单的westos用户无法使用crontab!
创建白名单,将westos用户写进白名单!
当白名单建立时,黑名单会失效!因此在白名单的用户westos及root用户才可以使用crontab
ps:做完实验,一切恢复原样!!!
三、邮件系统的管理
1. 处理任务输出
(1)日志产生自动发送邮件
当日志产生时,系统会自动向执行者发送一封邮件,前提是
- 安装postfix软件----发送邮件的
- 安装mail软件-----查看邮件的
- 开启postfix服务
- 重新开启crond服务
--------------------------------------------------------------实验----------------------------------
# dnf install postfix mailx :安装邮件软件
# systemctl enable --now postfix.service:开启postfix服务
此时写入定时任务查看实验效果!!
* * * * * /bin/date
利用mail命令却发现没有邮件!!
这是因为crond服务没有时别到postfix,因此重新开启crond服务即可!!
# systemctl restart crond.service:重新开启crond服务
这时用mail进行测试,发现已经有邮件!
或者可以利用# cat /var/log/cron 查看是否有邮件
以上邮件全部发送给root用户,这是可以设置的。
(2) 修改邮件收件人
- 编辑 /etc/crontab文件 ps:修改完不会立即生效
- 设置定时任务前添加 MAILTO=' ' ,会立即生效!
-----------------------------------------------实验-----------------------------------------
首先清空邮件,保证实验效果!
编辑 /etc/crontab文件,修改邮件收件人!
改为空,即不发送邮件!
此时进行测试,发现root用户仍然会收到邮件!
这是因为该文件系统开机已经读取过,修改不会立即生效!
设置定时任务前添加 MAILTO=' ' ,会立即生效!
(3) 永久关闭邮件发送功能
- 编辑 /etc/sysconfig/crond : CRONDARGS=-m off ,关闭邮件发送功能
修改后要重启服务!!
利用mail查看,发现已经没有邮件!
查看邮件是否执行:
# cat /var/log/cron
发现已经执行,但是没有发送邮件,说明邮件发送功能关闭成功!
以上只是屏蔽了邮件,但是任务输出仍然显示在 /var/log/cron 中,如果所有输出都不想显示怎麼办?
(4)重定向任务输出
在编辑定时任务时,直接重定向输出,屏蔽即可!
- * * * * * /bin/date &> /dev/null
ps:测试仍有输出,不知道为什么..........
四、系统级cron的设定
1. 基础设定
系统及cron的设定只能root用户执行!一般用来管理临时文件!
- /etc/cron.d :设定目录
-----------------------------------------------------------实验----------------------------------------------
建立脚本放在对应目录,即可设定定时任务!!
自己设定定时任务
# cd /etc/cron.d:在该目录下建立脚本
2. 优化临时文件存储
临时文件是有周期的,如果周期内直接用rm 清理临时文件不合适
因此可以用cron优化临时文件!
(1)临时文件的建立和清理
- /lib/tmpfiles.d/:临时文件目录
- systemd-tmpfiles --create /lib/tmpfiles.d/westos.conf:临时文件生效
- systemd-tmpfiles --clean /lib/tmpfiles.d/westos.conf:清理临时文件
首先进入目录,里面都是临时文件
自己建立一个临时目录:westos.conf
设定该目录的周期是5s
# vim /lib/tmpfiles.d/westos.conf
此时,用# watch -n 1 ls -lR /mnt/ 进行监控发现目录还没建立,这是因为临时文件没有生效!
# systemd-tmpfiles --create /lib/tmpfiles.d/westos.conf:使临时文件生效!
此时监控发现该目录已建立!
此时在该目录下建立文件, 建立后清除
# systemd-tmpfiles --clean /lib/tmpfiles.d/westos.conf
发现file2 file3 未清除,这是因为文件从建立到清除没有5s,所有暂时不清楚!
当超过5s后,再次执行清除命令,文件都以清理!
综上,该命令清理临时文件很合适!!因此,可以将该命令与定时任务相结合,就可以优化临时文件存储!
(2) 利用cron优化临时文件存储
将以上清理命令写进cron定时
# cd /etc/cron.d
# vim westos
01 * * * * root systemd-tmpfiles --clean /lib/tmpfiles.d/*.conf:每小时清理一次所有的临时文件