精读笔记 · 第10章 计划任务
大约 4 分钟
精读笔记 · 第10章 计划任务
精读整理自 RHCE9 随堂讲义(原文字版 5 页)|同名视频约 4 节 关联知识文件:
分章笔记/01-Linux/02-03-软件包与计划任务、02-05-服务管理与安全(systemd 服务)
一、计划任务是什么
- 作用:做周期性任务,最典型用途=定期备份数据。
- 分类:at 一次性调度(Schedule one-time tasks);cron/crontab 循环调度(recurring jobs)。
- 原理:crond 程序常驻(
/usr/sbin/crond)定时检查任务表,crond 不运行则计划任务不执行。
二、at 一次性任务
- 语法:
at <时间描述>,输入命令后Ctrl+D(<EOT>)提交。 - 时间写法示例:
now +5min(5 分钟后)、teatime tomorrow(明日 16:00 下午茶)、noon +4 days(4 天后中午)、5pm august 3 2024(指定年月日时分)。 - 例:
at now +1min→at> useradd uuuu→ Ctrl+D;atq查询任务队列;时间到id uuuu验证。 - 排错:报
Can't open /var/run/atd.pid ... No atd running→ 服务没启动,systemctl start atd(并 enable)。
三、crontab 循环任务
- 管理命令: | 命令 | 作用 | | --- | --- | |
crontab -e| 编辑当前用户任务 | |crontab -l| 查看当前用户任务 | |crontab -r| 删除当前用户所有任务 | |crontab -u 用户名 -e/-l| root 管理其他用户任务 | - 存储位置:
/var/spool/cron/用户名(此目录空说明没任务);系统级任务在/etc/crontab。 - 服务前提:
systemctl status crond.service、ps aux | grep crond确认运行。
四、crontab 时间格式(分 时 日 月 周)
# .---------------- minute (0-59)
# | .------------- hour (0-23)
# | | .---------- day of month (1-31)
# | | | .------- month (1-12) 或 jan,feb...
# | | | | .---- day of week (0-6, 周日=0 或 7) 或 sun,mon...
# | | | | |
# * * * * * 命令或脚本- 常用符号:
*每(每分/每小时…);*/5每 5 个间隔;1,4,6枚举;5-9范围。
五、时间表达式示例速查
| crontab 表达式 | 含义 |
|---|---|
* * * * * | 每分钟 |
*/5 * * * * | 每 5 分钟 |
0 * * * * | 每小时整点 |
02 * * * * | 每天 02:00 |
00 02 * * * | 每天 2:00 |
00 02 1 * * | 每月 1 号 2:00 |
00 02 14 2 * | 每年 2 月 14 日 2:00 |
00 02 * * 7 | 每周日 2:00 |
00 02 14 * 7 | 每月 14 号 2:00 和每周日 2:00 都执行(日月与周同时写是“或”) |
00 02 * * 5 | 每周五 2:00 |
00 02 * 6 5 | 教材示例称“每年 6 月的周五”(特殊;实际日字段为 *,Vixie cron 会 6 月每天 2:00 都触发,考试按教材口径作答) |
- 易错强调:当“日”和“周”同时写数字时,两者是 OR 关系(任一匹配即执行);只写其中一个,另一个用
*。
六、定时执行脚本案例
- 写脚本:
vim /root/1.sh,内容#!/bin/bash+/usr/bin/touch /root/\date +%F-%H-%M-%S`.txt`(文件名带时间戳)。 - 加执行权限:
chmod +x /root/1.sh。 - 写计划:
crontab -e加* * * * * /root/1.sh。 - 验证:等 1 分钟
ls -l /root看到按秒命名的新文件,即任务生效。
七、命令速查表
| 场景 | 命令 |
|---|---|
| 一次性任务 | at now +5min → 输命令 → Ctrl+D |
| 查 at 队列 | atq(可 atrm 编号 删除) |
| atd 服务 | systemctl start/enable atd |
| 编辑/查看/删除 cron | crontab -e/-l/-r |
| 管别人 cron | crontab -u tom -e/-l/-r |
| cron 服务 | systemctl status crond、`ps aux |
| 任务存放 | /var/spool/cron/用户、系统级 /etc/crontab |
| 排错 | tail -f /var/log/cron(crond 执行日志) |
八、易错点
- crontab 五行时间中周与日同时指定数字是或关系,不是且(
00 02 14 * 7会两周都触发)。 - 脚本没执行权限或路径不对、脚本内命令用相对路径,是“计划不生效”三大常见原因;cron 环境 PATH 很精简,脚本里命令尽量写绝对路径。
at任务报 atd.pid 错 → 服务没启;cron 任务不执行 → 先查 crond 进程,再查/var/log/cron。- 反引号时间戳
date +%F-%H-%M-%S注意%在 cron 里无特殊含义但脚本内要转义/引用好;分钟级任务建议sleep错峰。 - 用
crontab -e编辑的是当前用户任务,root 用户任务在/var/spool/cron/root,别直接手改文件。
九、实操清单
at 建一次性用户任务并用 atq/id uuuu 验证 → 故意不启 atd 复现报错并修复 → crontab -e 写 5 种表达式(每分钟/每5分钟/每天2点/每周五/每月14号2点)→ 写带时间戳 touch 脚本挂每分钟任务验证 → crontab -l/-r 管理 → 看 /var/log/cron 确认执行记录。
十、本章自测
- at 与 cron 适用场景?2. crontab 五行“分时日月周”的取值范围?3.
00 02 14 * 7每月会执行几次?4. 每 5 分钟执行怎么写?5. crontab 任务不执行先查哪三处?6. atd 未启动的报错提示是什么?
