欢迎光临
我们一直在努力

【RH134总结】 二

目录

一、一次性延迟任务:at 命令

核心功能

基本用法

时间格式(TIMESPEC)

作业管理

二、周期性用户作业:crontab

核心功能

时间格式详解

实战示例

常用管理命令

三、周期性系统作业:系统级 crontab

核心区别

存放位置

四、弥补错过的任务:Anacron

核心问题

工作原理

配置文件格式

五、现代替代方案:Systemd 定时器

核心优势

核心组件

实战示例:清理临时文件

总结:


一、一次性延迟任务:at 命令

核心功能

at 命令用于调度一次性的延迟任务,适合那些只需要在未来某个特定时间点执行一次的操作,例如系统维护、数据备份等。

基本用法

交互式输入:直接在终端输入 at <时间>,然后键入要执行的命令,按 Ctrl+D 结束。

脚本输入:通过重定向从脚本文件读取命令,例如 at now +5min < myscript.sh,将脚本中的任务调度到 5 分钟后执行。

时间格式(TIMESPEC)

at 支持非常灵活的自然语言时间格式:

具体时间:02:00pm, 15:59, midnight, teatime (16:00)

相对时间:now +5min, noon +4 days

具体日期:5pm august 3 2021

注意:如果只提供时间(如 21:00),则作业会在当天该时间执行;若当天时间已过,则顺延至次日。

作业管理

atq 或 at -l:查看当前用户的待处理作业列表。

at -c <作业编号>:查看作业的详细内容和运行环境。

atrm <作业编号>:从计划中删除指定作业。

权限:普通用户只能查看和控制自己的作业,root 用户可以管理所有作业。


二、周期性用户作业:crontab

核心功能

cron 是一个守护进程,负责执行配置文件中定义的周期性任务。每个用户都有自己的 crontab 文件,通过 crontab 命令进行管理。

时间格式详解

用户 crontab 文件的每一行代表一个作业,由 6 个字段 组成,空格分隔:(分时日月周)

字段含义取值范围
1 分钟 0-59
2 小时 0-23
3 1-31
4 1-12 (或 Jan, Feb…)
5 星期 0-7 (0 和 7 代表周日,1-6 代表周一到周六)
6 命令 要执行的命令或脚本

前五个字段的语法规则:

*:表示 “每一个”,即该字段的所有可能值。

数字:指定具体值,如 5 表示第 5 分钟。

x-y:表示范围,包含 x 和 y,如 8-20 表示从 8 点到 20 点。

x,y:表示列表,可包含范围,如 5,10-13,17。

*/x:表示间隔,如 */2 表示每 2 分钟。

实战示例

一)需求:以当前用户身份,在工作日(周一至周五)的上午 8 点到晚上 9 点之间,每 2 分钟记录一次当前日期和时间。

# 编辑当前用户的 crontab
crontab -e

# 在打开的编辑器中添加以下行
*/2 8-20 * * 1-5 /bin/date >> /home/user/time_log.txt

逐行解释:

*/2:每 2 分钟执行一次。

8-20:在 8 点到 20 点(含)之间执行。

*:每月的每一天。

*:每年的每个月。

1-5:仅在周一到周五执行。

/bin/date >> /home/user/time_log.txt:执行 date 命令(使用绝对路径),并将输出追加到日志文件中。

二)编写 crontab 定时任务 1.确定时间表达式 结合需求,我们可以逐个确定 5 个时间字段的值: 分钟:每 2 分钟一次 → */2 小时:8 点到 21 点 → 8-20 (是到20:59不包括21) 日期:每月任意一天 → * 月份:每年任意一月 → * 星期:周一到周五 → 1-5 2. 确定执行命令 需求是输出当前日期和时间,Linux 中对应的命令是 date(绝对路径)。

which date

通常输出结果为 /usr/bin/date。同时,我们需要将输出结果追加到文件中(避免覆盖原有内容),使用重定向符号 >>,例如写入 /home/当前用户/time_log.txt 文件。 3. 完整的 crontab 任务代码

*/2 8-20 * * 1-5 /usr/bin/date >> /home/$(whoami)/time_log.txt

常用管理命令

crontab -l:列出当前用户的所有作业。

crontab -r:删除当前用户的所有作业。

crontab -e:编辑当前用户的作业。


三、周期性系统作业:系统级 crontab

核心区别

用户 crontab 是为个人任务设计的,而系统级 crontab 则用于维护整个系统的正常运行,如日志轮转、缓存清理等。

存放位置

自定义的周期性系统作业,应始终在 /etc/cron.d/ 目录下创建独立的 crontab 文件。这样做的好处是:

与用户作业隔离,便于管理。

不会被未来的系统更新覆盖。

可以更精细地控制作业的执行用户。

系统级 crontab 格式:系统级文件比用户文件多一个字段,用于指定执行作业的用户:

分钟 小时 日 月 星期 用户名 要执行的命令

此外,系统还提供了一些预设的目录:

/etc/cron.hourly/:每小时执行的脚本。

/etc/cron.daily/:每天执行的脚本。

/etc/cron.weekly/:每周执行的脚本。

/etc/cron.monthly/:每月执行的脚本。只需将脚本放入这些目录,cron 就会自动按周期执行。


四、弥补错过的任务:Anacron

核心问题

cron 依赖系统持续运行。如果系统在任务计划执行时处于关闭或休眠状态,任务就会被错过。anacron 正是为了解决这个问题而设计的。

工作原理

anacron 根据 /etc/anacrontab 配置文件运行每日、每周和每月的作业。它通过 /var/spool/anacron/ 目录下的时间戳文件来记录作业上次执行的时间。当系统启动时,anacron 会检查这些时间戳,如果发现有作业错过了执行时间,就会在系统空闲时立即补执行。

配置文件格式

/etc/anacrontab 中的每一行包含四个字段:

周期(天数):定义作业的执行频率,如 1 表示每日,7 表示每周。

延迟(分钟):系统启动后,等待多久再开始执行作业,以避免系统刚启动时负载过高。

作业标识符:用于在日志中标识该作业。

命令:要执行的命令或脚本。


五、现代替代方案:Systemd 定时器

核心优势

随着 systemd 成为大多数现代 Linux 发行版的初始化系统,systemd 定时器作为 cron 的现代替代方案,提供了更强大、更灵活的定时功能,例如:

更精确的事件触发(如系统启动后、文件更改时)。

与 systemd 服务单元深度集成,便于管理和监控。

支持更复杂的依赖关系和资源控制。

核心组件

一个 systemd 定时器由两个文件组成:

定时器单元(.timer):定义何时触发任务。

服务单元(.service):定义要执行的任务本身。

实战示例:清理临时文件

系统自带的 systemd-tmpfiles-clean.timer 就是一个典型例子,它会定期清理 /tmp 等目录中的过期文件。

定时器配置(/usr/lib/systemd/system/systemd-tmpfiles-clean.timer):

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
ConditionPathExists=!/etc/initrd-release

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

[Install]
WantedBy=sysstat.target

关键配置项:

OnBootSec=15min:系统启动 15 分钟后触发一次。

OnUnitActiveSec=1d:服务单元上次激活后,间隔 1 天再次触发。

管理命令:

systemctl list-timers:查看所有活动的定时器。

systemctl daemon-reload:修改配置文件后,重新加载 systemd 配置。


总结:

表格

工具适用场景优点缺点
at 一次性延迟任务 简单直观,支持自然语言时间 不支持周期性任务
cron (用户) 个人周期性自动化 配置简单,用户隔离 依赖系统运行,错过不补
cron (系统) 系统级周期性维护 功能强大,适合复杂任务 配置相对复杂
anacron 弥补 cron 的不足 确保关键任务不被错过 仅支持日、周、月级别任务
systemd 定时器 现代、复杂的定时需求 功能强大,与系统深度集成 学习曲线较陡

通过理解这些工具的特性和适用场景,你可以构建出高效、可靠的 Linux 自动化运维体系。

赞(0)
未经允许不得转载:171主机测评 » 【RH134总结】 二
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址