Linux 自动化运维基础 —— 定时任务与日志轮转

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 的语法规则。
  2. 理解 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/ 目录下)。

相关推荐
Cx330❀1 小时前
【Linux网络】高性能 TCP 服务器:从多线程到线程池的架构演进与落地实践
linux·运维·服务器·网络·c++·tcp/ip·架构
程序猿编码1 小时前
vmlinuz 到 vmlinux:不碰源码,徒手重建内核 ELF 符号表
linux·服务器·网络·内核·elf
Par@ish1 小时前
Ubuntu Apache日志存储周期变更
linux·ubuntu·apache
简单点好呀1 小时前
Valgrind 报告干干净净,内存却在涨——我用 GDB 揪出了 47000 个泄漏的 Lua 闭包
linux
闲猫1 小时前
从0到1完整开发Smartshell最后沉淀出的Cursor开发规则
linux·运维·堡垒机·cursor·vibecoding
炘爚1 小时前
Phase 4:业务线程池 — IO/计算解耦
linux·c++
AOwhisky1 小时前
MySQL 学习笔记(第七期):高可用架构进阶与综合项目实战
linux·运维·笔记·学习·mysql·高可用·mha
张小姐的猫1 小时前
【Linux】多线程 —— 线程池 | 单例模式 | 常见锁
linux·运维·服务器·c++·单例模式·设计模式·策略模式
无限进步_1 小时前
【Linux】进程状态、僵尸与孤儿、进程调度
linux·运维·服务器·开发语言·数据结构·算法