一键脚本
- 免交互式 默认从
/vol2/1000/file/backup/2panel-backup恢复最新备份
bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/2panel_recover.sh) /vol2/1000/file/backup/2panel-backup
bash <(curl -sL ../sh/2panel_recover.sh) /vol2/1000/file/backup/2panel-backup
| 用法 | 命令 | 说明 |
|---|---|---|
| 使用默认目录 | ./2panel_recover.sh |
从默认目录取最新备份并恢复 |
| 指定备份目录 | ./2panel_recover.sh /data/bak |
从指定目录取最新备份并恢复 |
效果预览
补充说明
该脚本用于 2Panel 服务数据一键恢复,流程为:在备份目录中自动查找最新的 2Panel-*.zip 备份文件 → 使用 2panel restore -y 自动确认恢复 → 重载 systemd 配置并启动服务 → 检测服务状态。
功能特点
- 免交互设计:无需任何输入,适合数据恢复场景快速执行
- 自动找最新:兼容秒级时间戳
2Panel-YYYY-MM-DD_HH-MM-SS.zip与旧格式2Panel-YYYY-MM-DD.zip两种备份文件名 - 自动确认:
2panel restore -y跳过恢复确认提示,全程免交互 - 服务自愈:恢复完成后
systemctl daemon-reload重载配置并启动 2panel 服务 - 无备份保护:目录中无备份文件时红色提示并退出,避免误操作
- 参数兼容:支持传参指定备份目录,逻辑与备份脚本保持一致
- 彩色日志:备份目录、恢复文件、执行过程均彩色高亮输出
输出说明
脚本输出包含以下内容:
| 字段 | 说明 |
|---|---|
| 备份目录 | 查找备份文件的目录路径 |
| 恢复文件 | 找到的最新备份文件完整路径 |
| 执行恢复 | 2panel restore -y 自动确认恢复过程 |
| 服务状态 | 恢复后 2panel 服务运行状态(运行中/已停止/启动失败) |
注意事项
- 需要 root 权限执行,脚本依赖
systemctl重载配置并启动 2panel 服务 - 依赖 2Panel 自带的
2panel restore命令,版本需支持该子命令及-y参数 - 恢复操作会覆盖现有数据,执行前请确认备份文件可用
- 恢复文件通过文件名时间戳排序取最新,确保恢复到最新版本
- 默认备份目录
/vol2/1000/file/backup/2panel-backup可根据实际环境传参覆盖 - 兼容
2Panel-YYYY-MM-DD.zip与2Panel-YYYY-MM-DD_HH-MM-SS.zip两种命名格式 - 备份目录不存在或为空时脚本报错退出,不会误恢复
- 建议与
2panel_backup备份脚本配合使用
脚本源码
#!/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"
# 参数解析:支持传备份目录,兼容逻辑同备份脚本
# 用法:
# ./2panel_recover.sh # 使用默认目录,取最新备份
# ./2panel_recover.sh /data/bak # 指定备份目录,取该目录最新备份
parse_args() {
local p1="$1"
if [[ -n "${p1}" ]]; then
BACKUP_DIR="${p1}"
fi
}
parse_args "$@"
echo -e "${gl_zi}>>> 2Panel 恢复脚本${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
echo -e "${gl_huang}备份目录:${gl_lv}${BACKUP_DIR}${gl_bai}"
mkdir -p "${BACKUP_DIR}"
echo -e ""
echo -e "${gl_lan}>>> 查找最新备份文件${gl_bai}"
f=$(find "$BACKUP_DIR" -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 \
| tail -n1 \
| awk '{print $2}')
if [ -z "$f" ];then
echo -e "${gl_hong}❌ 无备份文件,退出${gl_bai}"
exit 1
fi
RESTORE_FILE="${BACKUP_DIR}/${f}"
echo -e "${gl_huang}恢复文件: ${gl_lv}${RESTORE_FILE}${gl_bai}"
echo -e ""
echo -e "${gl_huang}>>> 执行恢复 -y 自动确认${gl_bai}"
2panel restore -y "${RESTORE_FILE}"
echo -e ""
echo -e "${gl_huang}>>> 重载systemd配置并启动服务${gl_bai}"
systemctl daemon-reload
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"