Systemd

如何防止重啟systemd服務

  • February 2, 2022

我正在嘗試wpa_supplicant在較小的平板電腦上進行故障排除。平板電腦正在使用 systemd 執行wpa_supplicant.service具有條目的

ExecStart=/usr/sbin/wpa_supplicant -u

我想停止此服務並wpa_supplicant使用自定義配置執行,而不是使用 D-BUS 介面。所以我進入了

systemctl stop wpa_supplicant

停止原來的服務。該命令成功,但不幸的是該服務立即重新啟動。這是最不幸的,因為多個實例wpa_supplicant不能真正共存。

由於我對systemd不太了解:為什麼服務會立即重新啟動?我怎樣才能防止這種情況發生?這是由於一些我不知道的服務依賴關係嗎?

整個服務定義由下式給出:

[Unit]
Description=WPA supplicant
Before=network.target
Wants=network.target

[Service]
Type=dbus
BusName=fi.w1.wpa_supplicant1
ExecStart=/usr/sbin/wpa_supplicant -u

[Install]
WantedBy=multi-user.target
Alias=dbus-fi.w1.wpa_supplicant1.service

編輯:正在執行的服務是

  CGroup: /
          |-init.scope 
          | `-1 /sbin/init
          `-system.slice 
            |-systemd-timesyncd.service 
            | `-154 /lib/systemd/systemd-timesyncd
            |-crashuploader.service 
            | `-228 /usr/bin/crashuploader --path /home/root/
            |-sync.service 
            | `-181 /usr/bin/sync --service
            |-system-dropbear.slice 
            | `-dropbear@16-10.11.99.1:22-10.11.99.3:49522.service 
            |   |-2831 /usr/sbin/dropbear -i -r /etc/dropbear/dropbear_rsa_host_key -B
            |   |-2832 -sh
            |   |-2841 systemctl status
            |   `-2842 less
            |-dbus.service 
            | `-176 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
            |-update-engine.service 
            | `-185 /usr/sbin/update_engine -foreground
            |-system-serial\x2dgetty.slice 
            | `-serial-getty@ttymxc0.service 
            |   `-180 /sbin/agetty -8 -L ttymxc0 115200 xterm
            |-system-getty.slice 
            | `-getty@tty1.service 
            |   `-179 /sbin/agetty -o -p -- \x5cu --noclear tty1 linux
            |-wpa_supplicant.service 
            | `-2754 /usr/sbin/wpa_supplicant -u
            |-systemd-logind.service 
            | `-217 /lib/systemd/systemd-logind
            |-system-busybox\x2difplugd.slice 
            | `-busybox-ifplugd@usb0.service 
            |   `-175 /usr/sbin/ifplugd -n -i usb0
            |-systemd-udevd.service 
            | `-135 /lib/systemd/systemd-udevd
            |-systemd-journald.service 
            | `-134 /lib/systemd/systemd-journald
            |-dhcpcd.service 
            | `-198 /usr/sbin/dhcpcd -4 -b --master wlan0
            |-haveged.service 
            | `-133 /usr/sbin/haveged -w 1024 -v 1 --Foreground
            |-systemd-networkd.service 
            | `-145 /lib/systemd/systemd-networkd
            |-system-busybox\x2dudhcpd.slice 
            | `-busybox-udhcpd@usb0.service 
            |   `-1781 /usr/sbin/udhcpd -f /etc/udhcpd.usb0.conf
            |-xochitl.service 
            | `-229 /usr/bin/xochitl --system
            `-qmdns-responder.service 
              `-258 /usr/bin/qmdns-responder

您可以屏蔽服務以防止它被 systemd 啟動。

跑吧systemctl mask wpa_supplicant.service。這將防止服務被 systemd 啟動,直到它被取消屏蔽。

您可以通過執行取消屏蔽該服務systemctl unmask wpa_supplicant.service

請記住,這將阻止任何東西通過 systemd 啟動服務,包括可能期望或需要該服務執行才能自行執行的其他服務。

systemctl手冊頁:

面罩單元...
屏蔽一個或多個單位,如命令行中指定的那樣。這會將這些單元文件連結到 /dev/null,從而無法啟動它們。這是一個更強大的 disable 版本,因為它禁止所有類型的
單元的啟動,包括啟用和手動啟動。請謹慎使用此選項。這尊重 --runtime 選項,僅在系統下次重新啟動之前臨時屏蔽。可以使用 --now 選項
以確保單位也停止。此命令僅需要有效的單元名稱,它不接受單元文件路徑。

取消屏蔽單元...
取消屏蔽一個或多個單元文件,如命令行中指定的那樣。這將撤消蒙版的效果。此命令僅需要有效的單元名稱,它不接受單元文件路徑。

引用自:https://unix.stackexchange.com/questions/689011