📚

【Linux】systemdのサービス起動順位の確認方法

に公開

はじめに

systemd のユニットファイルを作成する際、あるユニットの起動後にサービスを実行したいことがあります。今回は、/etc/fstab に記載された nfsマウントの後に動作するサービスを作成する必要があった為、nfsマウントがどのユニット名で扱われているのか調べた方法を備忘録として残しておきます。

作業内容

インストールされているユニットの中から nfs 関連のサービス起動の流れを確認します。

root@fedora:~# systemctl list-unit-files | grep nfs
proc-fs-nfsd.mount                           static          -
var-lib-nfs-rpc_pipefs.mount                 static          -
nfs-blkmap.service                           disabled        disabled
nfs-idmapd.service                           static          -
nfs-mountd.service                           static          -
nfs-server.service                           disabled        disabled
nfs-utils.service                            static          -
nfsdcld.service                              static          -
nfs-client.target                            enabled         enabled

nfs-mountd.service が関連していそうです。

一応 nfs-mountd.service がスクリプト(視認できるか)かどうか調べます。

root@fedora:~# file /usr/lib/systemd/system/nfs-mountd.service 
/usr/lib/systemd/system/nfs-mountd.service: ASCII text

ASCII textだったので中身を確認してみます。

root@fedora:~# cat /usr/lib/systemd/system/nfs-mountd.service
[Unit]
Description=NFS Mount Daemon
Documentation=man:rpc.mountd(8)
DefaultDependencies=no
Requires=proc-fs-nfsd.mount
Wants=network-online.target
After=proc-fs-nfsd.mount
After=network-online.target local-fs.target
After=rpcbind.socket
BindsTo=nfs-server.service

[Service]
Type=forking
ExecStart=/usr/sbin/rpc.mountd

(※出力内容について補足)
【After=proc-fs-nfsd.mount】
  → このユニットは、/proc/fs/nfsd のマウントが完了した後に起動されるべき、という意味。これはNFS カーネルサーバーのインターフェースが使える状態になってから動作させたいときに必要。

【After=network-online.target local-fs.target】
・network-online. target
  → ネットワーク接続が完全に確立してから起動する。(DHCPなども完了済みの状態)
・local-fs.target
  → ローカルファイルシステム(/etc/fstabに書かれたローカルマウント)が全てマウントされた後に起動。

【After=rpcbind.socket】
  → このサービスはrpcbind (ポートマッパー)ソケットが起動した後に実行されるべき、という意味。特にNFSV3ではrpc.mountdなどがrpcbind に登録するため、これが必要。

After=network-online.target local-fs.targetと記載されているので、これでよさそうです。

さいごに

systemctl list-unit-files コマンドを使っていけば、他のsystemdサービスを追跡するのにも利用できそうです。

Discussion