systemd の管理単位
systemd は起動のすべてを 「ユニット」という単位で管理する。
ユニットは「Service」が代表例で、/etc/init.d/ に記述するようなサービスDaemonはすべて「Service unit」 として管理される。
ユニットには、service の他に、 target mount service device などがある。
これらのユニットには依存関係が記述されている。systemd はこれらの依存関係を事前に読み込んで解釈し「起動順序」を明確にする。それにより起動処理をマルチ化して高速化が可能になっている。
旧来に sysV init では /etc/rcX.d に記述されたスクリプトを「一つずつ」順番に起動していたので時間がかかっていた。Upstartでもこのあたりの解決は試みられていたがLinuxはSystemdを採用する方向のようです。Systemdから今後も変わらないことを祈るばかりです。
事前ロードがポイント
事前に依存関係や要求関係や、どのタイミングで実行するか。それらを解釈して並び替える処理が入る。その並び替え・依存関係・タイミングの管理単位が「ユニット」。
そのためリロードが必要。
常駐する自作ユニットファイルでデーモンを動かすときに、 daemonsのunit をリロードしてキャッシュを更新しないといけない。
sudo systemctl daemon-reload
そのためこのリロードコマンドが必要になっている。
ユニットの種類
systemd のユニットのタイプ別に一覧する。
ユニットはその役割ごとにそれぞれタイプが存在する。それは次のようになっている。
takuya@:~$ systemctl list-units --type automount device mount path service snapshot socket swap target timer
よく使うのは、service 一覧だと思う。