Linux系统的延迟任务及定时任务
延迟任务的发起
在系统中我们可以使用at命令来发起延迟任务
at命令执行是调用的是atd服务,即使系统最小化安装atd也会被安装到系统中
at 任务信息存放在系统中/var/spool/at目录中
at 任务的日志文件被存放到/var/log/cron中
at 任务执行时如果遇到系统处于关闭状态,那么在开启时atd任务会检测未执行的任务并且立即执行。
【 # systemctl status atd.service 查看延时任务有无开启】atd 是系统延时任务的守护进程,如果此程序关闭,那么系统延时任务无法使用。
# at 19:05 【延迟并选择命令执行的时间】
at> touch /mnt/file{1..5} —要执行的命令
at> <EOT> <<【 敲CTRL +D表示命令执行,任务录入结束】
at命令参数
-m 当任务完成之后,即使没有标准输出,将给用户发送邮件
# mkdir /rhel9
# mount /dev/sr0 /rhel9
# cd /etc/yum.repos.d/
# vim rhel9.repo
可以通过查看选择安装发送邮件的代码
# dnf search mail
# dnf install postfix.x86_84 s-nail.x86_64 —安装邮件系统
【postfix.x86_84发送邮件程序 s-nail.x86_64查看邮件的程序】
# systemctl enable --now postfix —开启程序
【显示的是还没有邮件】
显示at命令产生的输出以邮件形式输出
退出mail界面使用q
注意:at执行的命令如果执行了,但是没有输出,就不会给用户发邮件
# at -m now+1min —有没有输出都产生邮件
-l atq的别名,可列出目前系统上面的所有该用户的at调度
# at now+5min 【5分钟后执行命令】
# at -l 【查看任务列表】
# at -r 1 【删除任务 1 】
-d atrm的别名,可以取消一个在at调度中的工作 【和 -r 效果相似】
-v 使用较明显的时间格式,列出at调度中的任务列表
-V 显示at的版本
-c 可以列出后面接的该项工作的实际命令内容
# at -c 7 【7是延时命令的序号】
-f 从文件中读取任务
如何非交互的设定延迟任务
在生产环境中我们通常会用脚本来设定一个或多个延迟任务但是at任务的执行需要交互的进行,这样无法满足脚本自动化运行,输入重定向可以解决交互问题:
【# watch -n 1 "ls -lR /mnt/" 监控命令】
# vim at.sh
# sh at.sh 【执行脚本】
延迟任务的安全优化
系统中默认只存在黑名单/etc/at.deny
# vim /etc/at.deny 【/etc/at.deny是at命令的黑名单,写在里面的用户无法执行at命令】
# vim /etc/at.allow 【at白名单,只有root用户和在白名单中的用户可以执行at任务】
注意:此名单在系统中不存在,一旦建立黑名单中的内容将被系统忽略
黑白名单为用户列表,每个用户一行
定时任务简介
【定时任务是永久的,延时任务是一次性的】
和延迟任务类似,我们可以用crontab来解决自动进行的周期性的维护
定时任务类似手机闹钟,会重复执行
当定时任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者
在RHEL9中默认系统中的所有普通用户都可以发起定时任务
定时任务发起
在系统中我们可以使用crontab命令来发起用户级定时任务。
在系统中/etc/cronfilename 是系统级定时任务,只有root用户可以发起。
定时任务执行是调用的是crond服务,即使系统最小化安装crond也会被安装到系统中。
定时任务信息存放在系统中/var/spool/cron目录中,存放文件和发起人名称一致。
定时任务的日志文件被存放到/var/log/cron中。
定时任务执行时如系统处于关闭状态,那开启时crond任务会检测未执行的任务并立即执行。
# systemctl status crond.service 【定时任务的守护进程】
发起用户级周期行任务
周期任务发起方式
crontab命令的执行格式为:crontab –u 用户 –e
-u:用来设定某个用户的crontab服务此参数一般有root用户来运行。
# crontab -u root -e
* * * * * touch …
分钟 小时 天 月 周
-e:编辑用户的crontab文件内容。如果不指定用户则表示编辑当前用户crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则显示当前用户的。
-r:从/var/spool/cron目录中删除某个用户的crontab文件
-i:在删除用户的crontab文件时给确认提示【输入y表示确定执行命令】。
crontab 设定定时任务是会以vi命令打开临时文件,保存时把内容同步到/var/spool/cron中。
系统级别crontab目录详解
/etc/cron.d 系统自定义周期任务
/etc/cron.daily 每天周期任务
/etc/cron.hourly 每小时周期任务
/etc/cron.monthly 每月周期任务
/etc/cron.weekly 每周周期任务
注意:把要执行的动作记录为脚本,并把脚本放到相应的目录中就会以相应的时间执行。
【# watch -n 1 "ls /media/ -l" 监控命令】
# cd /etc/cron.d 【进入自定义周期任务目录】
# vim xxx 自定义名字,创建系统级别crontab任务
* * * * * root touch /media/lee{1..5} —这里输入的脚本会自动运行
定时任务执行优化
系统当中默认每个人都能执行crontab命令
系统中默认只存在黑名单/etc/cron.deny,写入此文件中的用户会被禁止使用定时任务
# echo test > /etc/cron.deny 【输入黑名单用户】
在系统中可以手动建立白名单/etc/cron.allow,当此文件出现黑名单不会被检测
# echo test > /etc/cron.allow 【输入白名单用户】
练习:在系统中设定延迟任务要求如下
1,在系统中建立easylee用户,设定其密码为easylee
2,延迟任务由root用户建立
3,要求在5小时后备份系统中的用户信息文件到/backup中
4,确保延迟任务是使用非交互模式建立
5,确保系统中只有root用户和easylee用户可以执行延迟任务的设定
1,# useradd easyle # echo easyle | passwd --stdin easyle
2 - 4,# vim at.sh 【选择root用户,建立非交互模式的脚本】
mkdir /backup
cp /etc/passwd /backup
# at -v now-5hour 【配置延时任务】
>> sh at.ch 【非交互模式运行任务】
5,vim /etc/at.allow 【配置白名单】
root
easylee
练习:在系统中设定定时任务并优化定时任务
1,每天凌晨4点显示系统的根设备使用信息并以邮件的形式发送到root邮箱中
2,确保此任务为系统定时任务
确定邮件系统安装成功 # dnf install postfix.x86_84 s-nail.x86_64
# systemctl enable --now postfix —开启程序
# cd /etc/cron.d 【进入自定义周期任务目录】
# vim xxx
00 04 * * * root df -h / | mail -s ’date’ root
# mail -u root 【查看邮箱邮件】