随机
Enter 搜索 ↑↓ 切换 Esc 清空

2panel_backup

脚本

2Panel 备份数据

一键脚本

bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/2panel_backup.sh) "/vol2/1000/file/backup/2panel-backup" 6
bash <(curl -sL ../sh/2panel_backup.sh) 6 "/vol2/1000/file/backup/2panel-backup"
用法 命令 说明
使用默认 ./2panel_backup.sh 备份到默认目录,保留 6 份
只传保留份数 ./2panel_backup.sh 10 自定义保留 10 份
只传备份目录 ./2panel_backup.sh /data/bak 自定义备份目录,保留 6 份
目录 + 保留数 ./2panel_backup.sh /data/bak 8 自定义目录与保留数量
顺序互换 ./2panel_backup.sh 8 /data/bak 保留数在前,顺序兼容

效果预览

执行脚本效果预览

补充说明

该脚本用于 2Panel 服务数据一键备份,流程为:停止 2panel systemd 服务 → 使用 2panel backup 命令打包生成 zip 备份文件(文件名精确到秒)→ 按保留数量自动清理过期备份 → 重新启动服务并校验状态。

功能特点

输出说明

脚本输出包含以下内容:

字段 说明
保存目录 备份文件存放路径
保留数量 设置的保留备份份数(默认 6)
执行备份 正在生成的备份文件完整路径
删除列表 将要删除的过期备份文件列表
服务状态 重启后 2panel 服务运行状态(运行中/已停止/启动失败)

注意事项

定时任务示例

# 下载脚本到系统目录
curl -fsSL https://gitee.com/meimolihan/cmdbox/raw/master/sh/2panel_backup.sh -o /usr/local/bin/2panel_backup

# 增加执行权限
chmod +x /usr/local/bin/2panel_backup

# 追加定时任务(防重复追加)
(crontab -l 2>/dev/null | grep -Fq '/usr/local/bin/2panel_backup /vol2/1000/file/backup/2panel-backup 6') || (crontab -l 2>/dev/null; echo '30 2 * * * /usr/local/bin/2panel_backup /vol2/1000/file/backup/2panel-backup 6 >> /var/log/2panel_backup.log 2>&1') | crontab -

# Linux 定时任务 美化列表
bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/lx_cron_list.sh)

# 查看日志
cat /var/log/2panel_backup.log

脚本源码

#!/bin/bash
set -uo pipefail

gl_hui='\033[38;5;59m'
gl_hong='\033[38;5;9m'
gl_lv='\033[38;5;10m'
gl_huang='\033[38;5;11m'
gl_lan='\033[38;5;32m'
gl_bai='\033[38;5;15m'
gl_zi='\033[38;5;13m'
gl_bufan='\033[38;5;14m'

BACKUP_DIR="/vol2/1000/file/backup/2panel-backup"
KEEP_NUM=6
BIN_2PANEL="/usr/local/bin/2panel"

if [[ ! -x "${BIN_2PANEL}" ]];then
    echo -e "${gl_hong}❌ 错误:2panel二进制不存在或无执行权限 ${BIN_2PANEL}${gl_bai}"
    exit 1
fi

parse_args() {
    local p1="${1:-}"
    local p2="${2:-}"
    if [[ -z "${p1}" ]]; then
        return
    fi
    if [[ "${p1}" =~ ^[0-9]+$ ]]; then
        KEEP_NUM="${p1}"
        if [[ -n "${p2}" ]]; then
            BACKUP_DIR="${p2}"
        fi
    else
        BACKUP_DIR="${p1}"
        if [[ -n "${p2}" && "${p2}" =~ ^[0-9]+$ ]]; then
            KEEP_NUM="${p2}"
        fi
    fi
}
parse_args "$@"

echo -e ""
echo -e "${gl_zi}>>> 备份 2Panel${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
echo -e "${gl_huang}保存目录:${gl_lv}${BACKUP_DIR}${gl_bai}"
echo -e "${gl_huang}保留数量:${gl_lv}${KEEP_NUM}${gl_bai}"

NOW=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_FILE="${BACKUP_DIR}/2Panel-${NOW}.zip"
mkdir -p "${BACKUP_DIR}"

echo -e ""
echo -e "${gl_huang}>>> 停止 2panel 服务${gl_bai}"
systemctl stop 2panel

echo -e ""
echo -e "${gl_lan}>>> 执行备份:${BACKUP_FILE}${gl_bai}"
if ! "${BIN_2PANEL}" backup "${BACKUP_FILE}"; then
    echo -e "${gl_hong}❌ 备份命令执行失败!不执行清理,退出脚本${gl_bai}"
    systemctl start 2panel
    exit 1
fi

cd "${BACKUP_DIR}" || exit 1
old_files=$(find . -maxdepth 1 -type f -name "2Panel-*.zip" -printf "%f\n" \
| sed -E 's/^2Panel-([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2})\.zip$/\1 &/' \
| sort -k1,1 \
| head -n -${KEEP_NUM} \
| awk '{print $2}')

if [[ -n "${old_files}" ]];then
    echo -e ""
    echo -e "${gl_hong}>>> 将删除过期备份文件:${gl_bai}"
    echo "${old_files}"
    echo "${old_files}" | xargs -I {} rm -f "./{}"
else
    echo -e ""
    echo -e "${gl_lv}>>> 无过期备份需要删除${gl_bai}"
fi

echo -e ""
echo -e "${gl_lan}>>> 当前备份目录下全部有效备份文件(时间升序):${gl_bai}"
ALL_BACKUPS=$(find "${BACKUP_DIR}" -maxdepth 1 -type f -name "2Panel-*.zip" -printf "%f\n" | sort)
if [[ -z "${ALL_BACKUPS}" ]];then
    echo -e "${gl_huang}    暂无备份文件${gl_bai}"
else
    echo "${ALL_BACKUPS}" | while read -r fname; do
        echo -e "    ${fname}"
    done
fi

echo -e ""
echo -e "${gl_huang}>>> 启动 2panel 服务${gl_bai}"
systemctl start 2panel
sleep 2
STATUS=$(systemctl is-active 2panel)
case "${STATUS}" in
    active)
        echo -e "${gl_lv}✅ 服务状态:运行中${gl_bai}"
        ;;
    inactive)
        echo -e "${gl_hong}❌ 服务状态:已停止${gl_bai}"
        ;;
    failed)
        echo -e "${gl_hong}❌ 服务状态:启动失败${gl_bai}"
        ;;
    *)
        echo -e "${gl_huang}⚠️ 服务状态:${STATUS}${gl_bai}"
        ;;
esac
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"

创建本地脚本

new_script="new_test.sh"

cat > "$new_script" << 'EOF'
#!/bin/bash

# 粘贴脚本源码

EOF

# 保留本地脚本,去掉 rm -f "$new_script"
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"

相关命令