Linux 自动化运维基础 ------ 定时任务与日志轮转
📑 目录
- [🎯 学习内容](#🎯 学习内容)
- [🟢 模块一:前置生存技能 ------ Vim 编辑器基础](#🟢 模块一:前置生存技能 —— Vim 编辑器基础)
- [1. Vim 的两种核心模式](#1. Vim 的两种核心模式)
- [2. "安全逃生"口诀(必考)](#2. "安全逃生"口诀(必考))
- [🟡 模块二:定时任务管理 (Crontab)](#🟡 模块二:定时任务管理 (Crontab))
- [1. 标准时间格式(五芒星法则)](#1. 标准时间格式(五芒星法则))
- [2. Crontab 命令参数详解](#2. Crontab 命令参数详解)
- [3. ⚠️ 避坑指南](#3. ⚠️ 避坑指南)
- [💣 坑 1:时间字段与命令之间"缺少空格"](#💣 坑 1:时间字段与命令之间"缺少空格")
- [💣 坑 2:命令替换语法错误(变量 vs 命令)](#💣 坑 2:命令替换语法错误(变量 vs 命令))
- [💣 坑 3:致命的路径问题(相对路径 vs 绝对路径)](#💣 坑 3:致命的路径问题(相对路径 vs 绝对路径))
- [🟠 模块三:日志轮转管理 (Logrotate)](#🟠 模块三:日志轮转管理 (Logrotate))
- [1. 核心配置文件解析 (
/etc/logrotate.conf)](#1. 核心配置文件解析 (/etc/logrotate.conf))
- [1. 核心配置文件解析 (
🎯 学习内容
- 掌握
crontab的语法规则。 - 理解
logrotate的工作原理。
🟢 模块一:前置生存技能 ------ Vim 编辑器基础
教学背景 :在修改定时任务(
crontab -e)或日志配置时,系统默认调用vim。很多新手配置了半天,最后因为不会退出导致前功尽弃。
1. Vim 的两种核心模式
- 命令模式:默认模式,用于移动光标、删除、复制。
- 插入模式 :底部显示
-- INSERT --,用于输入文本。
2. "安全逃生"口诀(必考)
| 你的需求 | 操作步骤(严格按顺序) | 命令含义 |
|---|---|---|
| 保存并退出 | ① 按 ESC 键 ② 输入 :wq ③ 按 Enter |
w=write(保存), q=quit(退出) |
| 放弃修改,强制退出 | ① 按 ESC 键 ② 输入 :q! ③ 按 Enter |
!=强制执行(无视未保存警告) |
| 仅保存不退出 | ① 按 ESC 键 ② 输入 :w ③ 按 Enter |
写完配置想继续编辑时使用 |
🟡 模块二:定时任务管理 (Crontab)
教学背景:Crontab 是 Linux 的"闹钟",但它的脾气非常古怪,格式错一个空格或符号都会导致任务静默失败。
1. 标准时间格式(五芒星法则)
text
* * * * * 要执行的命令
分 时 日 月 周
- 特殊符号 :
*(任意),,(离散时间),-(连续区间),/n(每隔n次,如*/2表示每2分钟)。
2. Crontab 命令参数详解
下表列出了 crontab 命令的常用参数及其功能:
| 参数 | 功能说明 | 示例 |
|---|---|---|
-e |
编辑当前用户的 crontab 文件 | crontab -e |
-l |
列出当前用户的 crontab 内容 | crontab -l |
-r |
删除当前用户的 crontab 文件(慎用) | crontab -r |
-u |
指定用户(需 root 权限) | crontab -u www-data -e |
-i |
与 -r 配合使用,删除前确认 |
crontab -ri |
使用提示:
- 编辑时默认使用
vi编辑器 -r会直接删除所有定时任务,无确认提示,建议先用-l备份
3. ⚠️ 避坑指南
这是本节课的重中之重,请对比以下"错误示范"与"正确写法":
💣 坑 1:时间字段与命令之间"缺少空格"
- ❌ 错误 :
*/2 * * * *echo "hello"(系统把*echo当成星期字段,直接报错拒绝保存) - ✅ 正确 :
*/2 * * * * echo "hello"(第5个星号后必须有空格)
💣 坑 2:命令替换语法错误(变量 vs 命令)
- ❌ 错误 :
echo "$date"(系统会去寻找名为 date 的变量,输出为空) - ✅ 正确 :
echo "$(date)"($()才是执行命令并获取结果的标准语法)
💣 坑 3:致命的路径问题(相对路径 vs 绝对路径)
- ❌ 错误 :
>> log.txt(Crontab 执行环境没有你当前的终端上下文,文件不知道写哪去了) - ✅ 正确 :
>> /home/lfh/log.txt(永远使用绝对路径)
🟠 模块三:日志轮转管理 (Logrotate)
教学背景 :定时任务不断写日志,硬盘迟早会爆。
logrotate就是系统的"清道夫",自动切割、压缩、清理旧日志。
1. 核心配置文件解析 (/etc/logrotate.conf)
通过翻译主配置文件,掌握全局默认规则:
| 核心参数 | 含义 | 企业级建议 |
|---|---|---|
weekly / daily |
轮转周期(每周/每天) | 核心业务日志建议 daily |
rotate 4 |
保留历史备份的份数 | 根据审计合规要求设置(如保留 6 个月) |
create |
切割后自动创建同名空文件 | 必须开启,否则程序可能因找不到文件而停止写日志 |
dateext |
归档文件使用日期后缀 | 强烈建议开启,方便排查历史问题 |
compress |
压缩旧日志 (gzip) | 强烈建议开启,节省 90% 磁盘空间 |
missingok |
文件不存在时不报错 | 推荐开启,防止偶发错误中断整个轮转任务 |
minsize 1M |
文件大于 1M 才触发轮转 | 防止切割出大量几 KB 的无用碎片文件 |
bash
vim /etc/logrotate.conf
解读logrotate.conf
bash
# see "man logrotate" for details
# 详见 "man logrotate" 手册获取详细信息
# rotate log files weekly
# 默认每周轮转(切割)一次日志文件
weekly
# keep 4 weeks worth of backlogs
# 保留 4 份历史备份日志(即保留 4 周的记录)
rotate 4
# create new (empty) log files after rotating old ones
# 在旧日志被轮转后,自动创建新的(空)日志文件
create
# use date as a suffix of the rotated file
# 使用日期作为轮转后归档文件的后缀(例如:log.txt-20260608)
dateext
# uncomment this if you want your log files compressed
# 如果你希望压缩归档的日志文件以节省空间,请取消下面这行的注释
#compress
# RPM packages drop log rotation information into this directory
# RPM 软件包会将各自的日志轮转配置规则文件存放在这个目录下(引入该目录下的所有配置)
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
# 没有特定的软件包负责管理 wtmp 和 btmp 文件 ------ 所以我们在这里直接配置它们的轮转规则
/var/log/wtmp {
monthly # 每月轮转一次
create 0664 root utmp # 轮转后创建新文件,权限设为 0664,属主为 root,属组为 utmp
minsize 1M # 只有当文件大小至少达到 1MB 时才执行轮转
rotate 1 # 只保留 1 份历史备份
}
/var/log/btmp {
missingok # 如果日志文件不存在(丢失),不报错并继续执行
monthly # 每月轮转一次
create 0600 root utmp # 轮转后创建新文件,权限设为 0600(仅属主可读写),属主为 root,属组为 utmp
rotate 1 # 只保留 1 份历史备份
}
# system-specific logs may be also be configured here.
# 系统特定的其他日志轮转规则,也可以直接配置在这里(但通常推荐写在 /etc/logrotate.d/ 目录下)。