私のArch LinuxのSystemdがrpcbind
自動的に起動します。systemd
これを止めるにはどうすればよいですか?にはリモートファイルシステムはありません/etc/fstab
。 rpcbindが起動する唯一の理由は、マルチユーザーターゲットには必要ですが、ディレクトリにサービスがないためです。実際に始まる理由をどうやって知ることができますか?
答え1
最良の方法はサービスを隠すことです。
systemctl mask rpcbind.service
Lennart Poetteringのブログ記事シリーズをご覧ください。管理者向けシステム、パート5ブロックの詳細:
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'