avatar

LeapHeap Journal

Record moments.

  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
主页 [已弃用] Linux通过shell脚本+cron进行定期备份
文章

[已弃用] Linux通过shell脚本+cron进行定期备份

发表于 2025-07-11 更新于 2026-02- 3
作者 LeapHeap
4~5 分钟 阅读
  1. 创建备份脚本。以下是一个例子:

#!/bin/bash

# 备份脚本配置
SOURCE_DIR="/opt/mc_servers/1.21.1-Fabric/world"       # 需要备份的源目录
BACKUP_DIR="/mnt/syn_nfs_mnt/backup/mc_servers/1211_Fabric"      # 备份存放目录
BACKUP_PREFIX="backup_mcs_1211Fabric"            # 备份文件前缀
LOG_FILE="/var/log/mcs_1211Fabric_backup.log"     # 日志文件路径
MAX_BACKUPS=7                      # 最大保留备份数量

# 创建日志函数
log() {
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[${timestamp}] $1" | tee -a "$LOG_FILE"
}

# 检查源目录是否存在
if [ ! -d "$SOURCE_DIR" ]; then
    log "错误: 源目录 $SOURCE_DIR 不存在!"
    exit 1
fi

# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
if [ $? -ne 0 ]; then
    log "错误: 无法创建备份目录 $BACKUP_DIR!"
    exit 1
fi

# 创建带时间戳的备份文件名
BACKUP_NAME="${BACKUP_PREFIX}$(date +%Y%m%d_%H%M%S).tar.gz"
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}"

log "开始备份: 从 $SOURCE_DIR 到 $BACKUP_PATH"

# 执行备份
tar -czf "$BACKUP_PATH" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"
if [ $? -eq 0 ]; then
    log "备份成功完成: $BACKUP_PATH"
else
    log "错误: 备份过程中出现错误!"
    exit 1
fi

# 清理旧的备份
BACKUP_COUNT=$(ls -1 "${BACKUP_DIR}/${BACKUP_PREFIX}"*.tar.gz 2>/dev/null | wc -l)
if [ "$BACKUP_COUNT" -gt "$MAX_BACKUPS" ]; then
    log "发现 $BACKUP_COUNT 个备份,超过最大保留数 $MAX_BACKUPS,开始清理..."
    ls -t "${BACKUP_DIR}/${BACKUP_PREFIX}"*.tar.gz | tail -n +$(($MAX_BACKUPS + 1)) | while read -r old_backup; do
        log "删除旧备份: $old_backup"
        rm -f "$old_backup"
    done
    log "清理完成"
fi

log "备份任务完成"
exit 0
  1. 创建logrotate,防止日志过大:sudo nano /etc/logrotate.d/mcs_1211Fabric_backup

/var/log/mcs_1211Fabric_backup.log {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    create 0640 root root
}
  1. 创建cron计划任务:sudo nano /etc/cron.d/mcs_1211Fabric_backup

30 1 * * * root /opt/mc_servers/backup_scripts/mcs_1211Fabric_backup.sh

此任务将会在每天01:30执行。

日志, 技术
许可协议:  CC BY 4.0
分享

相关文章

3月 7, 2026

在PVE里使用虚拟串口与虚拟机进行命令行交互

起因 在pve中,如果给虚拟机直通了物理显卡,此虚拟机在加载显卡驱动后就会默认使用直通显卡输出视频流,因此pve对于这个虚拟机的基于虚拟显卡的VNC控制台就无法使用了,虚拟机进入“Headless”状态。因此,为了在这种情况下仍然能通过控制台与虚拟机交互,就需要使用虚拟串口。 实战操作 添加硬件接口

3月 7, 2026

使用Docker部署网页版MeshCommander

简介 MeshCommander作为一款方便的第三方英特尔AMT客户端,本质上是一个可通过NPM部署的网页应用,但是官网只发布了官方打包好的桌面客户端。为了方便异地访问时直接在内网使用,故在路由器上部署一个由他人打包好的MeshCommander网页客户端。 前置条件 一台已经安装了Docker的主

3月 7, 2026

使用nginx给Halo后端补上favicon.ico

Halo默认不使用传统的favicon.ico,而是动态载入图标文件,因此某些浏览器认为网站没有图标。所以我使用nginx反代时手动指定nginx返回favicon.ico。 # 精确匹配 favicon.ico 请求 location = /favicon.ico { #

下一篇

解决地平线5卡死崩溃问题

上一篇

RHEL10使用tuned开启性能模式

最近更新

  • 在PVE里使用虚拟串口与虚拟机进行命令行交互
  • 使用Docker部署网页版MeshCommander
  • 使用nginx给Halo后端补上favicon.ico
  • 修复微软游戏服务导致的地平线5Xbox版异常
  • 在PVE/Debian上部署UPS状态监控的网页插件

热门标签

Halo 服务器 Web 博客 OpenWrt

目录

©2026 LeapHeap Journal. 保留部分权利。

使用 Halo 主题 Chirpy