とあるプログラマの日常

技術ネタから音楽ネタ、お絵描きなどなど、趣味丸出しのブログです。

systemdでのサービス起動シーケンスの確認方法(systemd-analyze)

そんなわけで、久しぶりのブログ更新(∩´∀`)∩

最近、serviseファイルを作ってオリジナルサービスを作ることになって、systemdで起動されるサービスの起動順序を調べる必要が出てきました。
で、色々調べていたら、systemd-analyzeというコマンドが使えることが分かったので、ちょっと使ってみました。
このsystemd-analyzeコマンドは、systemdで起動する各サービスの起動に掛かった時間などを調べて、OS起動速度のボトルネック解析に使うものです。
で、このコマンド、起動シーケンスやサービスの起動時間を、SVG形式のガントチャート(?)イメージで出力することができます。

以下のように、plot を指定して実行すると、SVG形式のテキストを出力してくれるので、その出力を適当なファイルに保存します。

$ systemd-analyze plot > systemd_plot.svg

保存したSVGファイルをブラウザで表示してみると、サービスの起動順序と時間が一目瞭然で確認できるチャートとして表示できます。

f:id:PANTOMAIMU:20170802204608p:plain

チャート全体のイメージはこんな感じ。
f:id:PANTOMAIMU:20170802204522j:plain


以下のイメージは、ネットワークサービスの起動完了後に実行されるサービス部分を拡大したものです。
f:id:PANTOMAIMU:20170802204549p:plain
赤い色の部分が、起動に掛かった時間を示しています。

試しに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で制御されているサービスの起動順序をお手軽に(?)確認することができました(`・ω・´)