systemdでのサービス起動シーケンスの確認方法(systemd-analyze)
そんなわけで、久しぶりのブログ更新(∩´∀`)∩
最近、serviseファイルを作ってオリジナルサービスを作ることになって、systemdで起動されるサービスの起動順序を調べる必要が出てきました。
色々調べていたら、systemd-analyzeというコマンドが使えることが分かったので、ちょっと使ってみました。
このsystemd-analyzeは、systemdで起動する各サービスの起動に掛かった時間などを調べて、OS起動速度のボトルネック解析に使うものです。
このコマンド、起動シーケンスやサービスの起動時間を、SVG形式のガントチャート(?)イメージで出力することができます。
以下のように、plot を指定して実行すると、SVG形式のテキストを出力してくれるので、その出力を適当なファイルに保存します。
$ systemd-analyze plot > systemd_plot.svg
保存したSVGファイルをブラウザで表示してみると、サービスの起動順序と時間が一目瞭然で確認できるチャートとして表示できます。
チャート全体のイメージはこんな感じ。
以下のイメージは、ネットワークサービスの起動完了後に実行されるサービス部分を拡大したものです。
赤い色の部分が、起動に掛かった時間を示しています。
試しにnetwork.targetの起動後に起動している、postfixのserviceファイルを確認してみると、以下のようにAfterにnetwork.targetが定義されていました。
[Unit] Description=Postfix Mail Transport Agent After=syslog.target network.target Conflicts=sendmail.service exim.service [Service] Type=forking PIDFile=/var/spool/postfix/pid/master.pid EnvironmentFile=-/etc/sysconfig/network ExecStartPre=-/usr/libexec/postfix/aliasesdb ExecStartPre=-/usr/libexec/postfix/chroot-update ExecStart=/usr/sbin/postfix start ExecReload=/usr/sbin/postfix reload ExecStop=/usr/sbin/postfix stop [Install] WantedBy=multi-user.target
こんな感じで、systemdで制御されているサービスの起動順序をお手軽に(?)確認することができました(`・ω・´)