v3.12: 修复 systemd 服务清理 (检查两个目录)

This commit is contained in:
mango
2026-02-02 22:53:36 +08:00
parent a34548446d
commit 737cd84e39

View File

@@ -739,15 +739,22 @@ do_full_restore() {
# 删除快照后新增的 systemd 服务 # 删除快照后新增的 systemd 服务
if [ -f "$tmp_dir/systemd-services.txt" ]; then if [ -f "$tmp_dir/systemd-services.txt" ]; then
log "清理新增的 systemd 服务..." log "清理新增的 systemd 服务..."
for f in /etc/systemd/system/*.service; do # 检查两个目录: /etc/systemd/system 和 /usr/lib/systemd/system
[ -e "$f" ] || continue for svc_dir in /etc/systemd/system /usr/lib/systemd/system; do
local fname=$(basename "$f") for f in "$svc_dir"/*.service; do
if ! grep -qx "$fname" "$tmp_dir/systemd-services.txt" 2>/dev/null; then [ -e "$f" ] || continue
log "停止并删除服务: $fname" local fname=$(basename "$f")
systemctl stop "$fname" 2>/dev/null || true # 跳过系统核心服务
systemctl disable "$fname" 2>/dev/null || true case "$fname" in
rm -f "$f" systemd-*|dbus*|ssh*|cron*|rsyslog*|networking*) continue ;;
fi 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 done
systemctl daemon-reload 2>/dev/null || true systemctl daemon-reload 2>/dev/null || true
fi fi
@@ -1260,18 +1267,18 @@ case "${1:-}" in
restore) restore)
# 命令行恢复: restore <快照文件> [full|data] # 命令行恢复: restore <快照文件> [full|data]
load_config 2>/dev/null || true load_config 2>/dev/null || true
local snap_file="${2:-}" _snap_file="${2:-}"
local mode="${3:-data}" _mode="${3:-data}"
if [ -z "$snap_file" ]; then if [ -z "$_snap_file" ]; then
error "用法: $0 restore <快照文件> [full|data]" error "用法: $0 restore <快照文件> [full|data]"
echo " full = 完整恢复 (删除后来安装的软件)" echo " full = 完整恢复 (删除后来安装的软件)"
echo " data = 仅恢复数据 (默认)" echo " data = 仅恢复数据 (默认)"
exit 1 exit 1
fi fi
[ ! -f "$snap_file" ] && { error "文件不存在: $snap_file"; exit 1; } [ ! -f "$_snap_file" ] && { error "文件不存在: $_snap_file"; exit 1; }
case "$mode" in case "$_mode" in
full) do_full_restore "$snap_file" ;; full) do_full_restore "$_snap_file" ;;
data|*) do_data_restore "$snap_file" ;; data|*) do_data_restore "$_snap_file" ;;
esac esac
;; ;;
help|--help|-h) help|--help|-h)