Linux(延迟及定时任务篇)

一、延迟任务的核心概念

1. 什么是延迟任务?

延迟任务(Delayed Task)是Linux系统中一种一次性执行的自动化维护机制。它专为以下场景设计:

  • 服务器空闲时段维护:在系统负载较低时自动执行资源密集型操作(如日志清理、备份等)。

  • 定时单次任务:无需重复执行,仅需在特定时间点触发一次的任务。

  • 无交互式操作:任务执行后,结果以邮件形式发送给发起者,适合自动化场景。

2. 延迟任务的特点

特性说明
一次性执行任务仅运行一次,不会周期性重复
邮件通知机制任务输出通过邮件发送到发起者(需配置邮件服务)
普通用户权限RHEL 9及衍生系统中,所有用户均可发起延迟任务
系统容错性若任务计划时间点系统关闭,开机后会立即执行未完成任务

二、使用at命令管理延迟任务

1. 核心服务与日志

  • 服务进程atd(系统最小化安装时默认包含)

  • 任务存储/var/spool/at

  • 执行日志/var/log/cron


2. 基础操作命令

# 进入at交互界面(按Ctrl+D保存退出)
at 12:30 2025-5-1
at> /path/to/your_script.sh
at> EOT

# 使用管道符直接传递命令
echo "shutdown -h now" | at 23:59

▶ 查看待执行任务
atq        # 列出所有待执行任务
# 输出示例:
# 2   Thu Oct 26 14:30:00 2025 a user1
▶ 删除指定任务
atrm 2     # 删除任务ID为2的延迟任务

3. 时间格式的灵活写法

格式示例说明
at now + 2 hours2小时后执行
at 15:30当天15:30执行(若已过时则顺延到次日)
at teatime当天16:00执行(预设关键词)
at midnight次日凌晨00:00执行

完整时间参数可通过 man at查看

4、ard是系统延迟任务的守护进程,如果它关闭则无法使用系统延迟任务


三、at命令参数详解

参数核心用途推荐场景
-m强制邮件通知关键任务的状态确认
-l快速查看任务列表日常任务监控
-d灵活取消任务计划变更或纠错
-v时间格式友好显示日志记录与审计
-c调试任务细节复杂脚本验证
-f非交互式提交任务自动化脚本集成

 四、at命令的时间表示方法
                HH:MM 在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行

                HH:MM YYYY-MM-DD 强制规定在某年某月的某一天的特殊时刻进行该工作

                now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks

  五、如何非交互的设定延迟任务
                 在生产环境中我们通常会用脚本来设定一个或多个延迟任务但是at任务的执行需要交互的进行,这样无法满足脚本自动化运行,输入重定向可以解决交互问题:

vim at_job.sh
 
#!/bin/bash
 
at now+1min <<EOF
 
rm -fr /mnt/file{1..5}
 
date
 
EOF

六、Linux延迟任务安全优化:黑白名单

1.Linux延迟任务权限模型

在Linux系统中,at命令的权限控制采用双名单机制,通过黑白名单文件实现精细化的用户权限管控。理解这套机制对于企业级服务器安全管理至关重要。

2、权限控制核心文件解析

1. 黑名单文件 /etc/at.deny

  • 默认状态
    系统初始安装时自动生成,包含默认允许用户列表(通常为空)

  • 作用机制
    文件中列出的用户禁止使用at命令

  • 文件路径

/etc/at.deny

2. 白名单文件 /etc/at.allow

  • 默认状态
    系统不自带,需手动创建

  • 作用机制
    当该文件存在时:

    • 仅root用户文件中的用户可使用at命令

    • 黑名单/etc/at.deny完全失效

  • 文件路径

/etc/at.allow

3、权限优先级规则

文件存在性生效规则
无任何名单文件仅root用户可使用at命令
只有黑名单存在除黑名单用户外,其他用户均可使用at命令
白名单存在(优先级最高)仅白名单用户+root可使用at,黑名单失效

七、Linux定时任务

一、定时任务:自动化运维的核心利器

1.1 什么是定时任务?

        定时任务(Cron Job)是Linux系统中用于周期性执行任务的自动化工具。就像手机闹钟可以设置每日提醒,定时任务能够在指定时间点/周期自动触发运维操作,是系统管理的核心工具。

与延迟任务的关键区别
特性定时任务(Cron)延迟任务(at)
执行模式周期性(如每天/每周)一次性
适用场景日志轮转、定期备份临时维护、紧急重启
权限控制用户级+系统级双模式用户级黑白名单控制
错误处理依赖外部监控邮件通知


二、定时任务管理全解析

2.1 核心组件与工作原理

  • 服务进程crond(系统最小化安装时默认包含)

  • 任务存储

    • 用户级/var/spool/cron/<用户名>

    • 系统级/etc/cron.d//etc/crontab

  • 执行日志/var/log/cron(关键排错依据)

  • 容错机制:若任务时间点系统关机,重启后会立即执行过期任务


2.2 任务类型对比

类型编辑方式适用场景权限要求
用户级定时任务crontab -e个人作业、测试环境普通用户/root
系统级定时任务直接编辑/etc/cron.*系统维护、全局服务root专属

三、配置定时任务

3.1 用户级任务配置

# 进入编辑模式(自动调用vim)
crontab -e

# 示例:每天3:30清理日志
30 3 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

# 保存退出后自动生效

3.2 系统级任务配置(需root权限)

# 创建自定义系统任务文件
sudo vim /etc/cron.d/daily-backup

# 内容示例(用户字段必须指定)
0 2 * * * root /opt/scripts/backup_db.sh

四、crontab命令参数深度解析

4.1 核心参数矩阵

参数功能说明使用示例
-u指定操作用户(root专用)crontab -u www -e
-l列出当前任务crontab -l > backup.txt
-r删除所有任务(高危!)crontab -r -i(交互式删除)
-e进入编辑模式(默认当前用户)crontab -e
file从文件导入任务配置crontab /path/to/jobs.txt

4.2 时间格式速查表

*    *    *    *    *
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    └── 星期 (0 - 6) (0表示周日)
│    │    │    └────── 月份 (1 - 12)
│    │    └───────── 日期 (1 - 31)
│    └──────────── 小时 (0 - 23)
└───────────────── 分钟 (0 - 59)

5.发起系统级别的周期任务

系统级别crontab目录详解

6.定时任务执行优化
         定时任务在执行时首先会查看执行者是否在名单中

         系统中默认只存在黑名单/etc/cron.deny,写入此文件中的用户会被禁止使用定时任务

         在系统中可以手动建立白名单/etc/cron.allow,当此文件出现黑名单不会被检测

         白名单出现只有root用户和白名单用户可以执行定时任务

         如果系统中没有黑白名单那么只有root用户可以执行任务

         黑白名单为用户列表,每个用户一行

         黑白名单只针对用户级定时任务进行限制


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值