148 lines
2.7 KiB
Markdown
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` 用于周期性任务
|
|
- 定时任务最重要的是“时间表达式正确 + 命令路径明确 + 日志可排查”
|