【跟我学Linux】第十天:自动备份、日志清理、状态监控

一、定时自动备份:用 crontab+tar 实现 “无人值守备份”

之前学了tar手动备份和crontab定时任务,今天把它们结合起来 —— 让系统每天凌晨 3 点自动备份你的linux_study目录,不用你手动操作(再也不怕忘备份)。

1. 先明确需求:每天凌晨 3 点,备份~/linux_study/backup,文件名带日期

为什么要自动备份? 就像手机 “自动云备份”,你不用管,系统到点就执行,哪怕你忘了,数据也安全。

2. 实操 1:写一个 “备份脚本”(把备份命令放进脚本,方便定时调用)

步骤 1:在linux_study目录创建备份脚本auto_backup.sh

bash

cd ~/linux_study  
nano auto_backup.sh  # 打开编辑器  

步骤 2:写入以下内容(复制粘贴,注意替换成你的用户名):

bash

#!/bin/bash  
# 自动备份脚本:每天备份linux_study到/backup  

# 定义备份源目录(你的学习目录)  
source_dir="~/linux_study"  

# 定义备份目标目录(之前创建的/backup)  
backup_dir="/backup"  

# 定义备份文件名(带日期和时间,精确到分钟,避免重名)  
backup_filename="linux_study-backup-$(date +%Y%m%d_%H%M).tar.gz"  

# 执行备份(用tar打包压缩)  
# 注意:如果/backup目录需要管理员权限,命令前加sudo  
sudo tar -zcvf "${backup_dir}/${backup_filename}" "$source_dir"  

# 备份完成后提示(可选,会记录到日志)  
echo "[$(date)] 备份完成:${backup_dir}/${backup_filename}" >> ~/linux_study/backup_log.txt  

步骤 3:给脚本加执行权限(必须,否则 crontab 无法运行):

bash

chmod +x auto_backup.sh  

步骤 4:手动测试脚本是否能正常运行(先确保手动能跑通,再设定时):

bash

./auto_backup.sh  # 执行脚本  

  • 输入你的用户密码(因为有sudo);
  • 执行完后,用ls /backup查看,应该有一个带日期的.tar.gz备份文件;
  • cat ~/linux_study/backup_log.txt查看,会有备份成功的记录。
3. 实操 2:用 crontab 设置 “每天凌晨 3 点执行脚本”

步骤 1:打开当前用户的定时任务编辑器:

bash

crontab -e  

  • 首次打开会让你选编辑器,选nano(输入数字 2,回车)。

步骤 2:在文件末尾添加一行(定时规则 + 脚本路径):

bash

# 每天凌晨3点执行auto_backup.sh脚本  
0 3 * * * ~/linux_study/auto_backup.sh  

定时规则解读(5 个星号分别代表 “分 时 日 月 周”):

  • 0 3 * * *
    • 第 1 个0:分钟(0 分);
    • 第 2 个3:小时(凌晨 3 点);
    • 后面 3 个*:任意日、任意月、任意周(即 “每天”)。

步骤 3:保存退出(Ctrl+O→回车→Ctrl+X),crontab 会自动生效。

验证定时任务是否添加成功

bash

crontab -l  # 列出当前用户的定时任务,能看到刚才添加的一行就对了  
4. 小技巧:测试定时任务(不用等到凌晨 3 点)

如果想马上测试 “定时任务是否能正常调用脚本”,可以临时设一个 “1 分钟后执行” 的任务:

bash

crontab -e  # 编辑定时任务  

添加一行(比如当前时间是 10:05,设 10:06 执行):

bash

6 10 * * * ~/linux_study/auto_backup.sh  # 注意修改分和时为当前时间+1分钟  

保存后等 1 分钟,查看/backup是否有新备份 —— 有就说明定时任务没问题,之后再改回凌晨 3 点即可。

二、日志轮转:用 logrotate 防止 “日志文件撑爆磁盘”

系统和程序会不断生成日志(比如/var/log/syslog),如果不清理,日志会越来越大(可能几十 G),最后占满磁盘导致系统崩溃。logrotate就是 “日志自动清理工具”,像 “垃圾桶定时清空”,会自动压缩、删除旧日志。

1. 什么是日志轮转?

简单说:logrotate会按规则(比如 “每周一次”“文件超过 100M”)处理日志:

  • 把当前日志改名为xxx.log.1,新建一个空的xxx.log继续记录;
  • 旧日志xxx.log.1会压缩成xxx.log.1.gz
  • 保留最近 5 份旧日志,更早的自动删除 —— 既不丢历史记录,又不占太多空间。
2. 实操 1:查看系统默认的日志轮转规则(了解即可)

系统已经给大部分日志配置了轮转规则,存放在/etc/logrotate.d/目录:

bash

ls /etc/logrotate.d/  # 列出所有配置文件  

会看到syslog(系统日志配置)、nginx(如果装了)等文件,这些是系统默认的,不用改。

3. 实操 2:给 “自己的日志文件” 配置轮转(比如backup_log.txt

场景:你的backup_log.txt(备份日志)会越来越大,给它配置轮转规则,让它 “超过 1M 就轮转,保留 3 份旧日志”。

步骤 1:创建一个logrotate配置文件(需要管理员权限):

bash

sudo nano /etc/logrotate.d/my_backup_log  # 文件名随便起,最好和日志相关  

步骤 2:写入以下配置(复制粘贴,注意日志路径要对):

bash

# 配置~/linux_study/backup_log.txt的轮转规则  
/home/你的用户名/linux_study/backup_log.txt {  # 你的日志文件绝对路径(必须写全,不能用~)  
    size 1M  # 当文件超过1M时轮转(也可以用weekly表示每周一次)  
    rotate 3  # 保留3份旧日志,第4份会被删除  
    compress  # 旧日志压缩(变成.gz)  
    missingok  # 如果日志文件不存在,不报错  
    notifempty  # 如果日志是空的,不轮转  
    create 0644 你的用户名 你的用户名  # 轮转后新建的日志文件权限、所有者、所属组  
}  

  • 注意:/home/你的用户名/要替换成你的实际路径(比如/home/zhangsan/),可以用pwd查看你的linux_study绝对路径:

    bash

    pwd ~/linux_study  # 会输出类似/home/zhangsan/linux_study,复制这个路径  
    

步骤 3:手动触发轮转测试(不用等自动执行):

bash

sudo logrotate -f /etc/logrotate.d/my_backup_log  # -f表示“强制轮转”(测试用)  

步骤 4:验证效果:
查看linux_study目录,会发现:

  • 原来的backup_log.txt还在(新建的空文件);
  • 多了一个backup_log.txt.1.gz(旧日志被压缩)—— 说明配置生效了!

三、系统状态监控脚本:一键查看 “CPU / 内存 / 磁盘 / 网络” 是否正常

工作中经常需要 “快速检查系统是否正常”,不用一个个输命令,写一个脚本,执行后直接输出关键状态,像 “系统体检报告”。

1. 脚本功能:输出 “CPU 使用率、内存使用率、磁盘使用率、网络连通性”

为什么要这个脚本? 就像你手机的 “一键体检”,点一下就知道 “电池是否正常、内存够不够、网络通不通”,不用自己找各个设置页。

2. 实操:创建system_check.sh脚本

步骤 1:在linux_study目录创建脚本:

bash

nano ~/linux_study/system_check.sh  

步骤 2:写入以下内容(复制粘贴,带颜色提示更直观):

bash

#!/bin/bash  
# 系统状态监控脚本:输出CPU、内存、磁盘、网络状态  

echo -e "\033[32m===== 系统状态体检报告($(date))=====\033[0m"  # 绿色标题  


# 1. CPU使用率(取前5行,过滤掉idle,计算使用率)  
echo -e "\033[33m1. CPU使用率:\033[0m"  # 黄色标题  
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8 "%"}')  # $8是idle(空闲),100-空闲=使用率  
echo "  当前CPU总使用率:$cpu_usage"  


# 2. 内存使用率  
echo -e "\033[33m2. 内存使用率:\033[0m"  
mem_usage=$(free -h | grep Mem | awk '{print $3 "/" $2 " (" $3/$2*100 "%)"}')  # 已用/总内存(百分比)  
echo "  当前内存使用:$mem_usage"  


# 3. 磁盘使用率(根目录/)  
echo -e "\033[33m3. 磁盘使用率(根目录):\033[0m"  
disk_usage=$(df -h / | grep / | awk '{print $3 "/" $2 " (" $5 ")"}')  # 已用/总容量(使用率)  
echo "  当前磁盘使用:$disk_usage"  


# 4. 网络连通性(测试百度)  
echo -e "\033[33m4. 网络连通性:\033[0m"  
if ping -c 1 www.baidu.com > /dev/null 2>&1; then  # ping一次,不输出结果(> /dev/null表示丢弃输出)  
    echo "  网络正常,能访问百度"  
else  
    echo -e "  \033[31m网络异常,无法访问百度\033[0m"  # 红色提示错误  
fi  


echo -e "\033[32m===== 体检结束 =====\033[0m"  

步骤 3:加执行权限并运行:

bash

chmod +x system_check.sh  
./system_check.sh  

预期输出:会彩色显示 CPU、内存、磁盘、网络状态,一目了然 —— 这就是 “一键查系统是否正常” 的基础,工作中可以扩展更多检查项(比如进程是否运行)。

今日必练实操清单(15 分钟搞定)

  1. 自动备份

    • 按步骤创建auto_backup.sh,手动测试能生成备份文件;
    • crontab -e设置 “每小时备份一次”(测试用,格式0 * * * *),1 小时后查看/backup是否有新备份,没问题再改成凌晨 3 点。
  2. 日志轮转

    • system_check.sh的输出日志(比如system_log.txt)配置轮转规则(参考backup_log.txt的步骤)。
  3. 状态监控

    • 运行system_check.sh,截图保存输出,看看你的系统哪些指标正常,哪些需要注意(比如内存使用率是否过高)。

今日总结(3 句话记住核心)

  1. 自动备份crontab + tar + 脚本 → 到点自动备份,命令是0 3 * * * 脚本路径,再也不怕忘。
  2. 日志轮转/etc/logrotate.d/配置文件 → 给日志设 “自动清理规则”(大小 / 时间),避免磁盘被撑爆。
  3. 状态监控脚本:整合top/free/df/ping → 一键输出系统关键状态,排查问题快 10 倍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值