【自动化运维】告别手动搬运!编写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天”,你知道该改哪一行吗?

相关文章
|
4月前
|
运维 监控 Java
【Linux基础】开发日常:盘点后端开发中最高频使用的10个Linux命令
本文为后端开发者整理了日常运维中最常用的10个Linux命令,涵盖文件查看、日志监控、进程管理、网络排查等核心场景。从`ls`、`cd`到`tail`、`grep`,再到`ps`、`netstat`、`top`等,结合实际案例讲解高频用法,助你高效应对服务器操作,提升开发效率。
|
监控 Ubuntu 安全
Ubuntu开启FTP服务教程
在Ubuntu服务器上配置FTP服务是一个常见的需求,无论是用于文件分享、网站管理还是数据备份。FTP(文件传输协议)是一种用于在网络上传输文件的协议,它可以让用户通过身份验证下载或上传文件。本文将指导您如何在Ubuntu系统上安装和配置FTP服务器,以及如何管理用户权限来保证服务器的安全性。
2898 0
|
4月前
|
IDE Linux Shell
Linux系统巡检常用命令
Linux系统需定期巡检,如同“体检”,及时发现软硬件问题,降低故障风险。常用命令涵盖系统、硬件、网络、进程、用户等方面状态查看,全面掌握服务器运行情况,保障系统稳定高效。
|
4月前
|
安全 Linux Shell
【Linux进阶】拒绝Permission denied!彻底搞懂chmod与chown文件权限
本文深入解析Linux权限管理核心命令`chmod`与`chown`,教你读懂`ls -l`输出,掌握数字权限(如755、644)的含义与应用场景,理解属主与属组的作用,强调最小权限原则,拒绝滥用`chmod 777`,保障服务器安全。
|
4月前
|
运维 Shell 应用服务中间件
【速查手册】Docker常用命令大全:这20%的命令解决了80%的问题
本文精炼总结 Docker 高频命令,按镜像管理、容器生命周期、排查调试、清理维护四大场景分类,详解常用参数与实战示例,附速查表,助你高效掌握核心操作,提升开发运维效率。
|
4月前
|
Kubernetes IDE 应用服务中间件
2.部署篇(开发部署)
本文介绍如何将SpringCloud应用部署到Kubernetes云端,基于EDAS实现快速上云。涵盖集群导入、应用初始化及通过IDE插件高效部署,助力开发者提升发布效率。
|
4月前
|
消息中间件 缓存 NoSQL
【Redis进阶】不止是缓存!Redis的5种核心数据结构与实战场景全解析
本文深入浅出地解析了Redis五大核心数据结构:String、Hash、List、Set和ZSet,结合图解与实战场景,涵盖缓存、计数器、分布式锁、购物车、消息队列、排行榜等典型应用,助你摆脱“只会SET/GET”的困境,真正发挥Redis的高性能潜力。
|
机器人 应用服务中间件 API
轻松集成私有化部署Dify文本生成型应用
Dify 是一款开源的大语言模型应用开发平台,融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者能快速搭建生产级生成式 AI 应用。通过阿里云计算巢,用户可以一键部署 Dify 社区版,享受独享的计算和网络资源,并无代码完成钉钉、企业微信等平台的应用集成。本文将详细介绍如何部署 Dify 并将其集成到钉钉群聊机器人和企业微信中,帮助您轻松实现 AI 应用的定义与数据运营,提升工作效率。
5707 65
轻松集成私有化部署Dify文本生成型应用
|
运维 监控 关系型数据库
自动化运维:编写基本的自动化脚本
自动化运维:编写基本的自动化脚本
809 1