wiki/运维/Linux/笔记/26.任务计划.md
2026-04-08 19:40:00 +08:00

2.7 KiB

1、任务计划概览

Linux 中任务计划主要分两类:

  • 一次性任务:只执行一次,例如 at
  • 周期性任务:按固定时间重复执行,例如 cron / crontab

常见用途:

  • 定时备份
  • 定时清理日志
  • 定时执行脚本
  • 安排未来某个时间点执行一次命令

2、一次性任务 at

at 用于安排任务在未来某个时间执行一次。

2.1 常见选项

  • -v:显示版本信息
  • -t:指定时间,格式通常为 MMDDhhmm
  • -l:列出等待执行的任务
  • -d:删除指定任务
  • -c:查看任务具体内容
  • -f:从文件读取任务内容

2.2 常见示例

1 小时后执行脚本:

at -f 1.sh now + 1 hour

在指定日期时间执行脚本:

at -f 1.sh 00:00 07.01.2024

2.3 常见管理命令

atq
atrm 任务编号
  • atq:查看任务队列
  • atrm:删除指定任务

3、周期性任务 crontab

crontab 用于按固定周期执行任务。

3.1 常见选项

  • -l:列出当前用户的定时任务
  • -e:编辑当前用户的定时任务
  • -r:删除当前用户全部定时任务

3.2 时间格式

crontab 每行通常由 5 个时间字段加命令组成:

分 时 日 月 周 命令

例如:

0 2 * * * /bin/bash /opt/backup.sh

表示每天凌晨 2 点执行脚本。

3.3 特殊符号

  • *:任意值
  • ,:多个离散值
  • -:范围
  • /:步长

示例:

*/5 * * * * /bin/bash /opt/check.sh

表示每 5 分钟执行一次。

4、系统级与用户级任务

4.1 用户级

每个用户都可以有自己的 crontab 任务。

crontab -e

4.2 系统级

系统级定时任务常见位置:

  • /etc/crontab
  • /etc/cron.d/
  • /etc/cron.hourly/
  • /etc/cron.daily/
  • /etc/cron.weekly/
  • /etc/cron.monthly/

5、常见运维建议

  • 定时任务中的命令尽量写绝对路径
  • 依赖环境变量的脚本,最好在脚本内部显式设置
  • 给定时任务加日志输出,方便排障
  • crontab -r 很危险,执行前要确认
  • 线上任务变更前建议先手动执行验证

6、常见排障思路

6.1 任务没有执行

优先检查:

  • 服务是否正常
  • crontab 写法是否正确
  • 执行脚本是否有权限
  • 环境变量是否缺失
  • 输出是否被重定向到日志

6.2 脚本手动能跑,定时跑不起来

高频原因:

  • PATH 不同
  • 当前用户不同
  • 工作目录不同
  • 依赖的环境变量未加载

7、小结

  • at 用于一次性任务
  • crontab 用于周期性任务
  • 定时任务最重要的是“时间表达式正确 + 命令路径明确 + 日志可排查”