v3.12: 修复 systemd 服务清理 (检查两个目录)
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user