shell脚本之日志备份,支持日志压缩、定期清理和备份时间戳功能

在日常管理服务器或者应用,日志文件积累了很多,需要定期备份以防止数据丢失或者方便后续分析。通常日志文件在/var/log目录下,我们可以写个脚本对/var/log目录进行备份。

#!/bin/bash

# 配置部分
LOG_DIR="/var/log"          # 日志目录路径
BACKUP_DIR="/backups/logs"  # 备份存储路径
RETENTION_DAYS=7            # 备份保留天数
TIMESTAMP=$(date +%Y%m%d%H%M%S)  # 时间戳格式

# 创建备份目录
mkdir -p "$BACKUP_DIR" || { echo "无法创建备份目录"; exit 1; }

# 执行备份
backup_file="logs_backup_$TIMESTAMP.tar.gz"
echo "正在备份日志文件..." $(date)
if tar czf "$BACKUP_DIR/$backup_file" -C "$LOG_DIR" .; then
    echo "备份成功: $BACKUP_DIR/$backup_file"
else
    echo "备份失败!" >&2
    exit 1
fi

# 清理旧备份
echo "清理${RETENTION_DAYS}天前的备份..."
find "$BACKUP_DIR" -name "logs_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete

使用方法:

  1. 将脚本保存为 log_backup.sh
  2. 添加执行权限:chmod +x log_backup.sh
  3. 测试运行:sudo ./log_backup.sh

测试运行结果:

解压日志文件:

设置定时任务(每天凌晨1点执行):

  1. 执行 crontab -e
  2. 添加:
0 1 * * * /path/to/log_backup.sh >/dev/null 2>&1

输出重定向 >/dev/null 2>&1

符号含义
>重定向操作符
/dev/nullLinux的空设备文件,写入它的内容会被丢弃(相当于黑洞)
2>标准错误输出(stderr)重定向
&1表示标准输出(stdout)的文件描述符
2>&1将标准错误输出合并到标准输出

对(0 1 * * * /path/to/log_backup.sh > /dev/null  2>&1)详细解释:

">"重定向,/dev/null是丢弃的地方,"2>"是处理错误输出,&1是指向同一个地方(/dev/null)。

这样做,可以防止cron发送邮件,或者避免产生不必要的日志文件。可以保持系统干净,减少干扰。

可调整配置项:

  • LOG_DIR: 需要备份的日志目录路径
  • BACKUP_DIR: 备份文件存储位置
  • RETENTION_DAYS: 备份保留天数
  • 时间戳格式(当前精确到秒)

注意事项:

  1. 确保执行用户有日志目录的读取权限和备份目录的写入权限
  2. 备份目录建议使用独立存储空间
  3. 如果需要备份特定日志文件(app1.log app2.log),可以修改tar命令部分
tar czf "$BACKUP_DIR/$backup_file" -C "$LOG_DIR" app1.log app2.log *.log

关键细节说明

  • 时间精度: -mtime 以 ​天数 为单位,最小精度是 ​24小时

    • 示例:如果现在是 2024-10-17 15:00 -mtime +7 会匹配 2024-10-10 14:59 之前的文件。
  • 通配符匹配: logs_backup_*.tar.gz 确保只删除备份文件,防止误删其他文件。

  • 权限要求: 执行用户需要对 $BACKUP_DIR 有 ​写入权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值