Linux系统如何完成系统周期化任务
1.系统周期化任务也称系统的延迟任务及定时任务:系统的维护工作大多数在服务器闲置时进行,利用延迟任务解决一次性维护,延迟任务的输出以邮件形式发送至发起者。
2.使用at命令发起延迟任务(调用atd服务,即使系统最小化安装atd任务也会被安装到系统中)首先要确保该系统的atd服务有没有开启,才可进行该任务。
atd是系统延时任务的守护进程
at 任务信息存放在系统中/var/spool/at 目录中;at 任务的日志文件被存放在/var/logcron中;at 任务执行时如果遇到系统处于关闭状态,那么在开启时atd任务会检测未执行的任务并且立即执行。
at延迟任务书写格式
at + 时间
touch + 目录+文件
ctrl+d 退出任务书写
at + -l ---查看任务列表
at + -c + 任务号 ---查看任务内容
at + -r + 任务号 ---删除任务
at命令可分两种模式进行延迟任务,交互模式与非交互模式,以上为交互模式,而非交互模式在文件中进行书写任务,格式要求。
vim at.sh 进入改延迟任务书写文件
at + 延迟时间 <<EOF
touch + 任务
EOF
date
以邮件形式接收和进行延迟任务,首先下载一个软件仓库,在rhel9的目录中挂载,vim rhel9.repo的文件中设置AppStream和BaseOS,寻找该程序名称,并下载程序,开启程序systemctl enable --now + 程序名称,后可以确保能够接收并从查看邮件形式的延迟任务。
at命令参数:
-m 当任务完成之后,即使没有标准输出,也将给用户发送邮件
-l 列出系统上面的用户的所有at调度任务
-d 取消at调度的任务
-v 使用较明显的时间格式
-c 列出后面接的该项工作的命令内容
-f 从文件中读取作业
3.延迟任务的安全优化:at任务在执行之前会查看执行者是否在该名单里;黑名单为/etc/at.deny,写入该文件中的用户会被禁止使用at任务;白名单/etc/at.allow,该文件出现黑名单不会被检测,而白名单只有里面存在的用户和root用户才能执行at命令;
4.定时任务:用crontab来解决自动进行的周期性的维护;重复执行;当定时任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者
在系统中使用crontab命令发起用户级定时任务;
/etc/cron/filename是系统级定时任务,root用户才能发起;
定时任务调用crond服务;
定时任务信息存放在系统中/var/spool/cron目录中,存放文件和发起人名称一致;
定时任务的日志文件被存放到/var/log/cron中;
定时任务执行时如果遇到系统处于关闭状态,那么在开启时crond任务会检测未执行的任务并立即执行
man 5 crontab 查看crontab里的服务
用户级周期性任务
crontab -u 用户名 -e ---crontab命令的执行格式
-u :用来设定某个用户的crontab服务此参数一般有root用户来运行
-e :编辑某个用户的crontab文件内容,如果不指定用户,则编辑当前用户的crontab文件
-l :显示某个用户的crontab文件内容,如果不指定用户,则显示当前用户的crontab文件
-r :从/var/spool/cron目录中删除某个用户的crontab文件
-i :在删除用户的crontab文件时给予确认提示
crontab在设定定时任务时会以vi命令打开临时文件,保存时把内容同步到/var/spool/cron中
用户级的周期性任务在var/spool/cron/的目录中;而系统级的周期性任务在/etc/cron.
系统级别crontab目录
/etc/cron.d ---系统自定义周期任务
/etc/cron.daily ---每天周期任务
/etc/cron.hourly ---每小时周期任务
/etc/cron.monthly ---每月周期任务
/etc/cron.weekly ---每周周期任务
5.定时任务执行优化:首先查看执行者是否在名单中;系统中默认只存在黑名单/etc/cron.deny,写入文件中的用户会被禁止使用定时任务;白名单/etc/cron.allow,文件出现黑名单不会被检测。