wiki/运维/操作系统/Linux/笔记/26.任务计划.md
2026-04-08 15:02:24 +08:00

148 lines
2.7 KiB
Markdown

## 1、任务计划概览
Linux 中任务计划主要分两类:
- **一次性任务**:只执行一次,例如 `at`
- **周期性任务**:按固定时间重复执行,例如 `cron` / `crontab`
常见用途:
- 定时备份
- 定时清理日志
- 定时执行脚本
- 安排未来某个时间点执行一次命令
## 2、一次性任务 `at`
`at` 用于安排任务在未来某个时间执行一次。
### 2.1 常见选项
- `-v`:显示版本信息
- `-t`:指定时间,格式通常为 `MMDDhhmm`
- `-l`:列出等待执行的任务
- `-d`:删除指定任务
- `-c`:查看任务具体内容
- `-f`:从文件读取任务内容
### 2.2 常见示例
1 小时后执行脚本:
```shell
at -f 1.sh now + 1 hour
```
在指定日期时间执行脚本:
```shell
at -f 1.sh 00:00 07.01.2024
```
### 2.3 常见管理命令
```shell
atq
atrm 任务编号
```
- `atq`:查看任务队列
- `atrm`:删除指定任务
## 3、周期性任务 `crontab`
`crontab` 用于按固定周期执行任务。
### 3.1 常见选项
- `-l`:列出当前用户的定时任务
- `-e`:编辑当前用户的定时任务
- `-r`:删除当前用户全部定时任务
### 3.2 时间格式
`crontab` 每行通常由 5 个时间字段加命令组成:
```shell
分 时 日 月 周 命令
```
例如:
```shell
0 2 * * * /bin/bash /opt/backup.sh
```
表示每天凌晨 2 点执行脚本。
### 3.3 特殊符号
- `*`:任意值
- `,`:多个离散值
- `-`:范围
- `/`:步长
示例:
```shell
*/5 * * * * /bin/bash /opt/check.sh
```
表示每 5 分钟执行一次。
## 4、系统级与用户级任务
### 4.1 用户级
每个用户都可以有自己的 `crontab` 任务。
```shell
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` 用于周期性任务
- 定时任务最重要的是“时间表达式正确 + 命令路径明确 + 日志可排查”