我的 Arch Linux 的 systemd 会rpcbind
自动启动。我必须做什么才能停止systemd
这样做?中没有远程文件系统/etc/fstab
。我发现 rpcbind 启动的唯一原因是多用户目标需要它,但目录中没有服务。我怎样才能弄清楚它真正启动的原因?
答案1
你最好的办法是掩盖服务:
systemctl mask rpcbind.service
请参阅 Lennart Poettering 的系列博文,面向管理员的 systemd,第五部分有关屏蔽的详细信息:
3. 您可以屏蔽服务。这就像禁用一项服务,但只是使用类固醇。它不仅确保服务不再自动启动,甚至确保服务甚至无法再手动启动。这是 systemd 中的一个隐藏功能,因为它并不常用,并且可能会让用户感到困惑。但具体做法如下:
通过符号链接服务文件,$ ln -s /dev/null /etc/systemd/system/ntpd.service $ systemctl daemon-reload
/dev/null
您可以告诉 systemd 永远不要启动有问题的服务并完全阻止其执行。存储的单元文件/etc/systemd/system
会覆盖/lib/systemd/system
具有相同名称的单元文件。前一个目录是管理员区域,后一个目录是包管理器的区域。通过在您中安装符号链接/etc/systemd/system/ntpd.service
,请确保 systemd 永远不会读取上游提供的服务文件/lib/systemd/system/ntpd.service
。
systemd 将识别符号链接的单元/dev/null
并将其显示为屏蔽的。如果您尝试手动启动此类服务(例如通过 systemctl start),则会失败并出现错误。
答案2
如果不存在,wanted/rpcbind.service
它很可能不会直接启动,而是通过套接字激活启动。您可以通过在状态输出行中查找indirect
而不是static
在状态输出行中查找来判断它是否是最近启动的(请注意,会自动将 添加到单元名称中,因为它未包含在命令行中):Loaded
systemctl
.service
$ systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)
Active: active (running) since Fri 2017-03-31 15:39:29 WIB; 37min ago
Main PID: 6763 (rpcbind)
CGroup: /system.slice/rpcbind.service
└─6763 /sbin/rpcbind -w
无论如何,您可以检查是否启用了套接字激活:
$ systemctl status rpcbind.socket
● rpcbind.socket - RPCbind Server Activation Socket
Loaded: loaded (/usr/lib/systemd/system/rpcbind.socket; disabled; vendor preset: enabled)
Active: active (listening) since Fri 2017-03-31 15:39:29 WIB; 37min ago
Listen: /var/run/rpcbind.sock (Stream)
[::]:111 (Stream)
0.0.0.0:111 (Stream)
(在上面的示例中,我禁用了该单元,但尚未停止rpcbind
在收到请求时启动的现有侦听器。)
执行以下命令应该杀死两者并确保它们永远不会启动:
$ systemctl disable rpcbind.service rpcbind.socket
$ systemctl stop rpcbind.service rpcbind.socket
然后状态检查应该产生如下内容:
$ systemctl status rpcbind.service rpcbind.socket
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)
Active: inactive (dead) since Fri 2017-03-31 16:17:05 WIB; 49s ago
Main PID: 6763 (code=exited, status=0/SUCCESS)
[...log messages...]
Mar 31 16:17:05 myhost systemd[1]: Stopped RPC bind service.
● rpcbind.socket - RPCbind Server Activation Socket
Loaded: loaded (/usr/lib/systemd/system/rpcbind.socket; disabled; vendor preset: enabled)
Active: inactive (dead) since Fri 2017-03-31 16:17:48 WIB; 6s ago
Listen: /var/run/rpcbind.sock (Stream)
[::]:111 (Stream)
0.0.0.0:111 (Stream)
[...log messages...]
Mar 31 16:17:48 myhost systemd[1]: Closed RPCbind Server Activation Socket.
Mar 31 16:17:48 myhost systemd[1]: Stopping RPCbind Server Activation Socket.
答案3
对于 systemd,停止启动时启动的服务的方法是使用该disable
选项,因此在本例中您将使用该命令systemctl disable rpcbind
,下面是我在 Fedora 20 系统上运行时看到的输出示例;
chris::test::07:08:29-> sudo systemctl disable rpcbind
rm '/etc/systemd/system/multi-user.target.wants/rpcbind.service'
rm '/etc/systemd/system/sockets.target.wants/rpcbind.socket'