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