【自动化运维】告别手动搬运!编写Shell脚本自动备份与清理日志

简介: 本文介绍如何通过Shell脚本结合Crontab,实现服务器日志的自动备份与清理。每天凌晨2点自动压缩昨日日志并保存至备份目录,同时删除7天前的旧备份,防止磁盘占满。脚本具备目录创建、压缩打包、错误提示和日志记录功能,操作安全可靠,适合Linux运维新手实践自动化管理。

前言

在服务器运维中,日志文件(Logs) 是个让人又爱又恨的东西。 爱它是因为出了Bug全靠它排查;恨它是因为它每天疯狂增长,如果不定期清理,很快就会把服务器磁盘塞满(Disk Full),导致服务宕机。

很多新手是等到磁盘满了,才急匆匆地上去手动删除。今天,我们用一个简单的 Shell 脚本,配合 Linux 的定时任务,把“备份日志”和“清理旧日志”这件事彻底自动化。

场景描述

假设我们的应用日志放在 /data/logs/myapp/ 目录下。我们的目标:

  1. 每天凌晨2点,把昨天的日志打包压缩。
  2. 将压缩包移动到备份目录 /data/backup/
  3. 自动删除 7 天前的备份文件,节省空间。

第一步:编写脚本 (backup_logs.sh)

首先,创建一个脚本文件:

Bash

vim backup_logs.sh

然后,复制以下代码。我已经给每一步都加了详细的中文注释,确保你能看懂。

Bash

#!/bin/bash
# ================= 配置区域 =================
# 日志源目录
SOURCE_DIR="/data/logs/myapp"
# 备份存放目录
BACKUP_DIR="/data/backup/myapp"
# 获取当前日期,格式如:20231027
DATE=$(date +%Y%m%d)
# ===========================================
# 1. 判断备份目录是否存在,不存在则创建
if [ ! -d "$BACKUP_DIR" ]; then
    mkdir -p "$BACKUP_DIR"
    echo "创建备份目录: $BACKUP_DIR"
fi
# 2. 开始打包压缩
# 将源目录下的所有 .log 文件打包成 log_日期.tar.gz
echo "开始备份..."
tar -czf "$BACKUP_DIR/log_$DATE.tar.gz" "$SOURCE_DIR"/*.log
# 检查上一条命令是否执行成功
if [ $? -eq 0 ]; then
    echo "备份成功:$BACKUP_DIR/log_$DATE.tar.gz"
else
    echo "备份失败!请检查目录或权限。"
    exit 1
fi
# 3. 清理旧日志
# 找到备份目录下,超过7天(+7)且后缀为 .tar.gz 的文件,并执行删除
find "$BACKUP_DIR" -type f -mtime +7 -name "*.tar.gz" -exec rm -rf {} \;
echo "已清理7天前的旧备份文件。"
echo "任务完成。"

第二步:赋予执行权限

还记得上一篇讲的 chmod 吗?刚写好的脚本是没有执行权限的。

Bash

# 赋予脚本执行权限
chmod +x backup_logs.sh

建议: 在正式上定时任务前,先手动运行一次脚本 ./backup_logs.sh,看看有没有报错,备份目录下有没有生成压缩文件。

第三步:设置定时任务 (Crontab)

脚本写好了,我们不能每天半夜爬起来手动点一下。Linux 自带的 Crontab 是最好的定时器。

  1. 打开定时任务编辑器:
    Bash
crontab -e
  1. 在编辑器末尾添加一行(按 i 进入编辑模式):Bash
# 每天凌晨 02:00 执行备份脚本
0 2 * * * /root/scripts/backup_logs.sh >> /tmp/backup.log 2>&1
  1. 这行代码的含义:
  • 0 2 * * *:分 时 日 月 周。意思是每天的 02:00 执行。
  • /root/scripts/backup_logs.sh:脚本的绝对路径(注意:一定要用绝对路径!)。
  • >> /tmp/backup.log 2>&1:把脚本执行过程中的输出日志(包括正确输出和错误报错)都记录到 /tmp/backup.log 里,方便后续排查脚本是否执行成功。
  1. 保存退出(按 Esc,输入 :wq)。

第四步:验证定时任务

如何确认定时任务是否生效了?

Bash

# 查看当前用户的定时任务列表
crontab -l
# 查看系统定时任务日志(查看是否有执行记录)
tail -f /var/log/cron

总结

通过这个简单的脚本,我们实现了一个闭环的自动化运维流程:自动备份 -> 自动压缩 -> 自动清理过期文件

虽然现在的云服务提供了很多现成的日志服务(如阿里云SLS),但掌握这种基础的 Shell 脚本编写能力,能让你在处理一些临时性、定制化的任务时游刃有余。

小作业:尝试修改脚本,将“保留7天”改为“保留30天”,你知道该改哪一行吗?

相关文章
|
13天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
652 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
350 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
359 155

热门文章

最新文章