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