From 737cd84e39f7e3fbd194bba475454841459f26c8 Mon Sep 17 00:00:00 2001 From: mango Date: Mon, 2 Feb 2026 22:53:36 +0800 Subject: [PATCH] =?UTF-8?q?v3.12:=20=E4=BF=AE=E5=A4=8D=20systemd=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=B8=85=E7=90=86=20(=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E7=9B=AE=E5=BD=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vps-snapshot.sh | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/vps-snapshot.sh b/vps-snapshot.sh index cd896b9..b348b8c 100755 --- a/vps-snapshot.sh +++ b/vps-snapshot.sh @@ -739,15 +739,22 @@ do_full_restore() { # 删除快照后新增的 systemd 服务 if [ -f "$tmp_dir/systemd-services.txt" ]; then log "清理新增的 systemd 服务..." - for f in /etc/systemd/system/*.service; do - [ -e "$f" ] || continue - local fname=$(basename "$f") - if ! grep -qx "$fname" "$tmp_dir/systemd-services.txt" 2>/dev/null; then - log "停止并删除服务: $fname" - systemctl stop "$fname" 2>/dev/null || true - systemctl disable "$fname" 2>/dev/null || true - rm -f "$f" - fi + # 检查两个目录: /etc/systemd/system 和 /usr/lib/systemd/system + for svc_dir in /etc/systemd/system /usr/lib/systemd/system; do + for f in "$svc_dir"/*.service; do + [ -e "$f" ] || continue + local fname=$(basename "$f") + # 跳过系统核心服务 + case "$fname" in + systemd-*|dbus*|ssh*|cron*|rsyslog*|networking*) continue ;; + esac + if ! grep -qx "$fname" "$tmp_dir/systemd-services.txt" 2>/dev/null; then + log "停止并删除服务: $fname" + systemctl stop "$fname" 2>/dev/null || true + systemctl disable "$fname" 2>/dev/null || true + rm -f "$f" + fi + done done systemctl daemon-reload 2>/dev/null || true fi @@ -1260,18 +1267,18 @@ case "${1:-}" in restore) # 命令行恢复: restore <快照文件> [full|data] load_config 2>/dev/null || true - local snap_file="${2:-}" - local mode="${3:-data}" - if [ -z "$snap_file" ]; then + _snap_file="${2:-}" + _mode="${3:-data}" + if [ -z "$_snap_file" ]; then error "用法: $0 restore <快照文件> [full|data]" echo " full = 完整恢复 (删除后来安装的软件)" echo " data = 仅恢复数据 (默认)" exit 1 fi - [ ! -f "$snap_file" ] && { error "文件不存在: $snap_file"; exit 1; } - case "$mode" in - full) do_full_restore "$snap_file" ;; - data|*) do_data_restore "$snap_file" ;; + [ ! -f "$_snap_file" ] && { error "文件不存在: $_snap_file"; exit 1; } + case "$_mode" in + full) do_full_restore "$_snap_file" ;; + data|*) do_data_restore "$_snap_file" ;; esac ;; help|--help|-h)