如何防止systemd服务重新启动

如何防止systemd服务重新启动

我正在尝试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 
             | `[email protected]: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 
             | `[email protected] 
             |   `-180 /sbin/agetty -8 -L ttymxc0 115200 xterm
             |-system-getty.slice 
             | `[email protected] 
             |   `-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 
             | `[email protected] 
             |   `-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 
             | `[email protected] 
             |   `-1781 /usr/sbin/udhcpd -f /etc/udhcpd.usb0.conf
             |-xochitl.service 
             | `-229 /usr/bin/xochitl --system
             `-qmdns-responder.service 
               `-258 /usr/bin/qmdns-responder

答案1

您可以屏蔽某个服务以防止它被 systemd 启动。

赶紧跑systemctl mask wpa_supplicant.service。这将阻止该服务被 systemd 启动,直到它被揭开。

您可以通过运行来取消屏蔽该服务systemctl unmask wpa_supplicant.service

请记住,这将阻止任何内容通过 systemd 启动服务,包括可能期望或需要该服务运行才能运行的其他服务。

systemctl手册页:

       面罩单元...
           按照命令行上的指定,屏蔽一个或多个单元。这会将这些单元文件链接到 /dev/null,从而无法启动它们。这是禁用的更强版本,因为它禁止所有类型的
           单元的激活,包括启用和手动激活。请小心使用此选项。这遵循 --runtime 选项,仅暂时屏蔽,直到系统下次重新启动。可以使用 --now 选项
           以确保机组也停止运行。此命令仅需要有效的单元名称,不接受单元文件路径。

       取消屏蔽单位...
           按照命令行上的指定,取消屏蔽一个或多个单元文件。这将撤销蒙版的效果。此命令仅需要有效的单元名称,不接受单元文件路径。

相关内容