1、延迟任务
概念:
at命令用法(发起延迟命令)
-
at 命令执行是调用的是 atd 服务,即使系统最小化安装 atd 也会被安装到系统中
-
at 任务信息存放在系统中/var/spool/at目录中
- at 任务的日志文件被存放到/var/log/cron中
-
at 任务执行时如果遇到系统处于关闭状态,那么在开启时 atd 任务会检测未执行的任务并且立即执行
基本用法
前置条件:【 # systemctl status atd.service 查看延时任务有无开启】atd 是系统延时任务的守护进程,如果此程序关闭,那么系统延时任务无法使用。
at 用于安排一次性延迟任务,格式为 at [参数] [时间],输入命令后按 Ctrl+D 保存(会显示<EOT>)。
at 命令参数
at命令常用参数 | |
-m | 当任务完成之后,即使没有标准输出,将给用户发送邮件(启用邮件需建立软件仓库并安装邮件系统) |
-l | atq的别名,可列出目前系统上面的所有该用户的at调度 |
-d | atrm的别名,可以取消一个在at调度中的工作 |
-r | 删除任务(效果和 -d 类似) |
-v | 使用较明显的时间格式,列出at调度中的任务列表 |
-V | 显示at的版本 |
-c | 可以列出后面接的该项工作的实际命令内容 |
-f | 从文件中读取任务 |
at 命令的时间表示方法
- HH:MM 在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行
- HH:MM YYYY-MM-DD 强制规定在某年某月的某一天的特殊时刻进行该工作
- now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks
格式示例:
at now +5 minutes 5分钟后执行
at 14:30 今日14:30执行
at 2:30 tomorrow 明天2:30执行
at teatime 16:00(支持关键词如 teatime、midnight)
如何非交互的设定延迟任务


延迟任务的安全优化
- at任务在执行时首先会查看执行者是否在名单中
- 系统中默认只存在黑名单/etc/at.deny,写入此文件中的用户会被禁止使用at任务
- 在系统中可以手动建立白名单/etc/at.allow,当此文件出现黑名单不会被检测
- 白名单出现只有root用户和白名单用户可以执行at任务
- 如果系统中没有黑白名单那么只有root用户可以执行任务
- 黑白名单为用户列表,每个用户一行
二、定时任务
定时任务介绍
- 和延迟任务类似,我们可以用crontab来解决自动进行的周期性的维护
- 定时任务类似手机闹钟,会重复执行
- 当定时任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者
- 在RHEL9中默认系统中的所有普通用户都可以发起定时任务
定时任务发起
- # systemctl status crond.service 【定时任务的守护进程】
- 在系统中我们可以使用crontab命令来发起用户级定时任务
- 在系统中/etc/cronfilename 是系统级定时任务,只有root用户可以发起
- 定时任务执行是调用的是crond服务,即使系统最小化安装crond也会被安装到系统中
- 定时任务信息存放在系统中/var/spool/cron目录中,存放文件和发起人名称一致
- 定时任务的日志文件被存放到/var/log/cron中
- 定时任务执行时如果遇到系统处于关闭状态,那么在开启时crond任务会检测未执行的任务并且立即执行
发起用户级周期行任务
周期任务发起方式(crontab 命令)
crontab命令参数
crontab命令参数 | |
-u | 用来设定某个用户的 crontab 服务此参数一般有 root 用户来运行 |
file | 用来设定某个用户的 crontab 服务此参数一般有 root 用户来运行 |
-e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
-l | 显示某个用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
-r | 从 /var/spool/cron 目录中删除某个用户的 crontab 文件 |
-i | 在删除用户的 crontab 文件时给确认提示。 |
文件时间表示格式
crontab 时间字段为五个星号(* * * * *),分别表示:
分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 周几(0-7, 0和7均为周日)
常用符号 | |
* | 任意值 |
, | 多个值(如 1,3,5) |
- | 范围(如 1-5) |
*/n | 步长(如 /3 每3单位) |
* | 每个 |
* * * * *
| 每分钟 |
1,5 | 1和5 | 11,05*** | 1:10和5:00 |
1-5 | 1到5 | *1-5**** | 1点到5点的每分钟 |
*/5 | 每隔5 | */5**** | 每隔5分钟 |
crontab用户级任务管理
编辑任务
crontab -e 编辑当前用户的任务
查看任务
crontab -l 列出当前用户的任务
删除任务
crontab -r 删除所有任务
发起系统级别的周期任务
系统级别crontab目录详解
/etc/cron.d | 系统自定义周期任务 |
/etc/cron.daily
|
每天周期任务
|
/etc/cron.hourly
|
每小时周期任务
|
/etc/cron.monthly
|
每月周期任务
|
/etc/cron.weekly
|
每周周期任务
|
自定义周期任务设置方式
# vim /etc/cron.d/job分钟 小时 天 月 周 用户 动作1 09-17 * * * root date以root身份每天9点-17点每1分执行date
crontab用户级安全限制
通过 /etc/cron.allow 和 /etc/cron.deny 控制权限
规则优先级:
- 若 cron.allow 存在,仅允许其中的用户使用 crontab。
- 若 cron.allow 不存在,检查 cron.deny,拒绝其中的用户。
- 若两者均不存在,默认行为因系统而异(通常允许所有用户)。
配置示例:
echo "admin" >> /etc/cron.allow 仅admin可使用cron
echo "guest" >> /etc/cron.deny 禁止guest使用cron
定时任务执行优化

