← 返回主页
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查看任务的具体命令内容

使用示例

  1. 5分钟后执行
at now + 5 minutes
at> echo "hello" > /tmp/hello.txt
at> <EOT>   # Ctrl+D 结束输入
  1. 指定具体时间
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 单位

示例

  1. 每 5 分钟执行脚本
*/5 * * * * /home/test/hello.sh
  1. 每周五 16:30 发送邮件
30 16 * * 5 mail user@example.com < /home/mail/content.txt

系统级计划任务

  • 编辑 /etc/crontab 文件(支持指定运行用户)
  • 格式:* * * * * <用户> <命令>

目录结构说明

路径用途
/etc/crontab系统级任务配置
/etc/cron.d/扩展任务配置目录
/var/spool/cron/用户个人任务存储

最佳实践

  1. 分散执行时间 — 避免同一时刻集中运行多个任务,错峰分配资源。
  2. 抑制无用输出 — 用 >/dev/null 2>&1 屏蔽输出,防止垃圾邮件。
  3. 安全检查 — 定期查看 /var/log/cron,排查恶意任务。
  4. 避免冲突 — 不要同时指定“星期”和“日期”,以免混淆调度。

停机补执: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补执任务确保停机期间错过的任务得以执行

根据实际需求选择合适的工具,并遵循最佳实践以保证系统稳定与安全。