【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