From de93dfd6e69af024bc82ce7a636aeb010599bdef Mon Sep 17 00:00:00 2001 From: mango Date: Mon, 2 Feb 2026 11:42:10 +0800 Subject: [PATCH] =?UTF-8?q?v3.5:=20=E6=B7=BB=E5=8A=A0TG=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=92=8C=E5=AE=9A=E6=97=B6=E5=BF=AB=E7=85=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vps-snapshot.sh | 91 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 86 insertions(+), 5 deletions(-) diff --git a/vps-snapshot.sh b/vps-snapshot.sh index b0cec3e..3549bce 100755 --- a/vps-snapshot.sh +++ b/vps-snapshot.sh @@ -513,6 +513,9 @@ create_snapshot() { local size=$(du -h "$snapshot_file" | cut -f1) log "快照已创建: $snapshot_file ($size)" + # TG通知 + send_tg "📸 *${VPS_NAME}* 快照完成\n大小: $size" + # 清理本地旧快照 cleanup_local @@ -744,6 +747,9 @@ do_sync_remote() { cleanup_remote log "✅ 同步完成" + + # TG通知 + send_tg "📤 *${VPS_NAME}* 同步完成\n远程: $REMOTE_IP:$remote_path" } #=============================================================================== @@ -757,6 +763,70 @@ send_tg() { -d chat_id="$TG_CHAT_ID" -d text="$msg" -d parse_mode="Markdown" > /dev/null } +#=============================================================================== +# 定时快照 +#=============================================================================== + +setup_cron() { + local script_path=$(readlink -f "$0") + + echo "" + info "⏰ 设置定时快照" + echo "" + echo " 1) 每天一次" + echo " 2) 每12小时" + echo " 3) 每6小时" + echo " 4) 每小时" + echo " 5) 自定义cron表达式" + echo " 6) 查看当前定时任务" + echo " 7) 删除定时任务" + echo " 0) 返回" + echo "" + read -p "请选择: " cron_choice + + local cron_expr="" + case $cron_choice in + 1) cron_expr="0 2 * * *" ;; + 2) cron_expr="0 */12 * * *" ;; + 3) cron_expr="0 */6 * * *" ;; + 4) cron_expr="0 * * * *" ;; + 5) read -p "输入cron表达式: " cron_expr ;; + 6) + echo "" + crontab -l 2>/dev/null | grep -E "vps-snapshot|快照" || echo "无定时任务" + return + ;; + 7) + crontab -l 2>/dev/null | grep -v "vps-snapshot" | crontab - + log "定时任务已删除" + return + ;; + 0) return ;; + *) error "无效选项"; return ;; + esac + + [ -z "$cron_expr" ] && return + + # 选择快照类型 + echo "" + echo " 1) 仅本地快照" + echo " 2) 快照并同步远程" + read -p "请选择: " snap_type + + local cmd="" + case $snap_type in + 1) cmd="$script_path snapshot" ;; + 2) cmd="$script_path snapshot-sync" ;; + *) error "无效选项"; return ;; + esac + + # 添加到crontab + (crontab -l 2>/dev/null | grep -v "vps-snapshot"; echo "$cron_expr $cmd # vps-snapshot") | crontab - + + log "✅ 定时任务已设置: $cron_expr" + send_tg "⏰ *${VPS_NAME}* 定时快照已设置\n$cron_expr" +} + #=============================================================================== # 配置管理 #=============================================================================== @@ -846,10 +916,11 @@ show_menu() { echo " 10) 导入 Docker 数据" echo " 11) 查看本地快照" echo " 12) 同步到远程" - echo " 13) 安装依赖" + echo " 13) 设置定时快照" + echo " 14) 安装依赖" echo " 0) 退出" echo "" - read -p "请选择 [0-13]: " choice + read -p "请选择 [0-14]: " choice case $choice in 1) do_setup ;; @@ -881,7 +952,8 @@ show_menu() { ls -lh "${LOCAL_DIR:-/var/snapshots}" 2>/dev/null || echo "无快照" ;; 12) do_sync_remote ;; - 13) install_deps ;; + 13) setup_cron ;; + 14) install_deps ;; 0) exit 0 ;; *) error "无效选项" ;; esac @@ -898,7 +970,15 @@ show_menu() { case "${1:-}" in setup) do_setup ;; scan) detect_apps ;; - snapshot) create_snapshot "${2:-/var/snapshots}" "${3:-snapshot}" ;; + snapshot) + load_config 2>/dev/null || true + create_snapshot "${LOCAL_DIR:-/var/snapshots}" "${VPS_NAME:-snapshot}" + ;; + snapshot-sync) + load_config 2>/dev/null || true + create_snapshot "${LOCAL_DIR:-/var/snapshots}" "${VPS_NAME:-snapshot}" + do_sync_remote + ;; migrate) do_migrate ;; docker-export) docker_export "${2:-/var/snapshots}" ;; docker-import) docker_import "${2:-/var/snapshots}" ;; @@ -908,7 +988,8 @@ case "${1:-}" in echo "命令:" echo " setup 配置向导" echo " scan 扫描已安装应用" - echo " snapshot 创建快照" + echo " snapshot 创建本地快照" + echo " snapshot-sync 创建快照并同步远程" echo " migrate 一键迁移" echo " docker-export 导出 Docker" echo " docker-import 导入 Docker"