NOTE
Linux 计划任务
整理 cron、at、systemd timer 等 Linux 计划任务配置与排查。
概述
Linux 提供了多种计划任务工具,满足不同场景需求:
- at & batch:一次性任务执行
- crontab:周期性任务调度
- anacron:弥补因停机错过执行的周期任务
一次性任务:at & batch
安装与启停
# 安装 at 工具
yum install at
# 管理服务状态
systemctl status atd # 查看状态
systemctl enable atd # 启用自启
systemctl start atd # 立即启动
命令语法
at [-mldv] TIME # 创建任务
at -c <任务ID> # 查看任务详情
| 参数 | 说明 |
|---|---|
-m | 任务完成后发送邮件(即使无输出) |
-l | 列出当前用户的所有待执行任务 |
-d | 取消指定任务(等效于 atrm) |
-v | 以更易读的格式显示时间 |
-c | 查看任务的具体命令内容 |
使用示例
- 5分钟后执行
at now + 5 minutes
at> echo "hello" > /tmp/hello.txt
at> <EOT> # Ctrl+D 结束输入
- 指定具体时间
at 13:44 2025-09-03
注意:at 任务由 atd 服务独立执行,与用户 Shell 环境无关,设置后离线仍可正常执行。
空闲执行:batch
- 用法与
at相同,但不支持时间参数 - 系统在 CPU 空闲时自动执行任务
访问控制
/etc/at.allow— 白名单(优先级高)/etc/at.deny— 黑名单
若白名单存在,仅列出的用户可使用 at;否则检查黑名单。
周期任务:crontab
命令语法
crontab [-u user] [-l | -e | -r]
| 参数 | 说明 |
|---|---|
-u | 为指定用户管理任务(仅 root 可用) |
-l | 列出当前用户的任务 |
-e | 编辑任务列表 |
-r | 删除所有任务 |
时间语法格式
* * * * * <命令>
# │ │ │ │ │
# │ │ │ │ └─ 星期 (0-7, 0 和 7 均为周日)
# │ │ │ └─── 月份 (1-12)
# │ │ └───── 日期 (1-31)
# │ └─────── 小时 (0-23)
# └───────── 分钟 (0-59)
特殊符号
| 符号 | 含义 | 示例说明 |
|---|---|---|
* | 任意值 | 每小时 |
, | 多个值 | 1,3,5 表示第 1、3、5 单位 |
- | 范围 | 8-12 表示 8~12 |
*/n | 间隔 | */5 每 5 单位 |
示例
- 每 5 分钟执行脚本
*/5 * * * * /home/test/hello.sh
- 每周五 16:30 发送邮件
30 16 * * 5 mail user@example.com < /home/mail/content.txt
系统级计划任务
- 编辑
/etc/crontab文件(支持指定运行用户) - 格式:
* * * * * <用户> <命令>
目录结构说明
| 路径 | 用途 |
|---|---|
/etc/crontab | 系统级任务配置 |
/etc/cron.d/ | 扩展任务配置目录 |
/var/spool/cron/ | 用户个人任务存储 |
最佳实践
- 分散执行时间 — 避免同一时刻集中运行多个任务,错峰分配资源。
- 抑制无用输出 — 用
>/dev/null 2>&1屏蔽输出,防止垃圾邮件。 - 安全检查 — 定期查看
/var/log/cron,排查恶意任务。 - 避免冲突 — 不要同时指定“星期”和“日期”,以免混淆调度。
停机补执:anacron
功能特点
- 专用于补执因系统停机错过的周期任务
- 默认通过
/etc/cron.hourly/0anacron每小时触发
命令语法
anacron [-sfn] [任务名]
| 参数 | 说明 |
|---|---|
-s | 按顺序执行任务 |
-f | 强制执行(忽略时间戳) |
-n | 立即执行(无视延迟设置) |
-u | 仅更新时间戳,不执行命令 |
配置文件:/etc/anacrontab
RANDOM_DELAY=45 # 最大随机延迟(分钟)
START_HOURS_RANGE=3-22 # 允许执行的时间段
# 周期天数 | 延迟基础值 | 任务标识 | 命令
1 5 cron.daily run-parts /etc/cron.daily
7 25 cron.weekly run-parts /etc/cron.weekly
@monthly 45 cron.monthly run-parts /etc/cron.monthly
anacron 确保在指定时间范围内(含随机延迟)补执未完成的任务。
总结
| 工具 | 适用场景 | 特点 |
|---|---|---|
at / batch | 一次性任务 | 简单临时任务,支持空闲触发 |
crontab | 周期任务 | 精准定时,配置灵活 |
anacron | 补执任务 | 确保停机期间错过的任务得以执行 |
根据实际需求选择合适的工具,并遵循最佳实践以保证系统稳定与安全。