一、系统的延迟任务及定时任务
在系统中我们可以使用at命令来发起延迟任务
at命令执行是调用的是atd服务即使系统最小化安装atd也会被安装到系统中
at 任务信息存放在系统中/var/spool/at目录中
at 任务的日志文件被存放到/var/log/cron中
at 任务执行时如果遇到系统处于关闭状态,那么在开启时atd任务会检测未执行的任务并且立即执行 延迟任务发起方法如下:
] # at 11:30
at> touch /mnt/file{1..5}
at> <EOT> << CTRL +D
at 命令常用参数
-m 当任务完成之后,即使没有标准输出,将给用户发送邮件
-l atq的别名,可列出目前系统上面的所有该用户的at调度
-d atrm的别名,可以取消一个在at调度中的工作
-v 使用较明显的时间格式,列出at调度中的任务列表
-c 可以列出后面接的该项工作的实际命令内容
-f 从文件中读取作
at 命令的时间表示方法
HH:MM 在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行
HH:MM YYYY-MM-DD 强制规定在某年某月的某一天的特殊时刻进行该工作
now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks
如何非交互的设定延迟任务
]# vim at_job.sh
#!/bin/bash
at now+1min <<EOF
rm -fr /mnt/file{1..5}
date
EOF
延迟任务的安全优化
at任务在执行时首先会查看执行者是否在名单中
系统中默认只存在黑名单/etc/at.deny,写入此文件中的用户会被禁止使用at任务
在系统中可以手动建立白名单/etc/at.allow,当此文件出现黑名单不会被检测
白名单出现只有root用户和白名单用户可以执行at任务
如果系统中没有黑白名单那么只有root用户可以执行任务
黑白名单为用户列表,每个用户一行
二、定时任务
定时任务发起
在系统中我们可以使用crontab命令来发起用户级定时任务
在系统中/etc/cronfilename 是系统级定时任务,只有root用户可以发起
定时任务执行是调用的是crond服务,即使系统最小化安装crond也会被安装到系统中
定时任务信息存放在系统中/var/spool/cron目录中,存放文件和发起人名称一致
定时任务的日志文件被存放到/var/log/cron中
定时任务执行时如果遇到系统处于关闭状态,那么在开启时crond任务会检测未执行的任务并且立即执行
crontab命令的执行格式为:crontab –u 用户 –e
crontab命令参数如下
-u:用来设定某个用户的crontab服务此参数一般有root用户来运行。 file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件
-i:在删除用户的crontab文件时给确认提示。
crontab 在设定定时任务是会以vi命令打开临时文件在保存时会把内容同步到/var/spool/cron中
文件格式为:分 时 天 月 周 执行动作
#11 11 * * * echo hello #每天11点11分执行echo hello 命令
在时间表示中天和周时分开计算的,* * 5 * 5表示每月5号以及每个周的周5
发起系统级别的周期任务
自定义周期任务设置方式
]# vim /etc/cron.d/job
分钟 小时 天 月 周 用户 动作
01 09-17 * * * root date
定时任务执行优化
定时任务在执行时首先会查看执行者是否在名单中
系统中默认只存在黑名单/etc/cron.deny,写入此文件中的用户会被禁止使用定时任务
在系统中可以手动建立白名单/etc/cron.allow,当此文件出现黑名单不会被检测
白名单出现只有root用户和白名单用户可以执行定时任务
如果系统中没有黑白名单那么只有root用户可以执行任务
黑白名单为用户列表,每个用户一行 黑白名单只针对用户级定时任务进行限制