Amazon Linux 2 でサービスの起動タイミングを確認したいのですがどうしたらいいですか?

2020.11.04

困っていたこと

Amazon Linux 2 で 独自のユニットを登録していますが、起動タイミングを確認したいです。いい方法はありますか?

どう対応すればいいの?

systemd-analyzeコマンドでシステムの起動パフォーマンスの統計を確認することが可能です。

https://www.freedesktop.org/software/systemd/man/systemd-analyze.html

やってみた

実際に以下のブログのユニットファイルを設定して実際に確認しました。

Amazon Linux 2 が起動してネットワークが有効になった後で自作スクリプトを実行する方法を調べてみた

こちらは、ネットワークが有効になった後で自作スクリプトを実行するユニットファイルを設定しています。 起動後にインスタンスにログインして以下コマンドを実行します。

systemd-analyze plot コマンドを実行する

https://www.freedesktop.org/software/systemd/man/systemd-analyze.html

This command prints an SVG graphic detailing which system services have been started at what time, highlighting the time they spent on initialization.

こちらのコマンドで、サービスがどのタイミングで実行されたか視覚的にわかります。

$ systemd-analyze plot > bootup.svg
$ mv bootup.svg /var/www/html/

または、ローカルにダウンロードして確認します。

scp -i ~/****.pem ec2-user@***.***.***.***:bootup.svg ./

全体 image

After=network-online.targetと設定したとおり、network-online.targetのあとに実行されていることがわかります。

image

$ systemctl cat test.service
# /etc/systemd/system/test.service
[Unit]
Description=exec by systemd
After=network-online.target

[Service]
Restart=no
Type=simple
RemainAfterExit=yes
ExecStart=/home/ec2-user/exec_ping.sh systemd start
ExecStop=/home/ec2-user/exec_ping.sh systemd stop

[Install]
WantedBy=network-online.target

もう一つの例として、以下のブログのユニットファイルを設定して実際に確認しました。

EC2 Image Builder を使用して 作成した AMI で 起動時に一度だけプログラムを実行するにはどうしたらいいですか?

こちらのブログで設定した内容ではcloud-init.targetのあとに実行するように設定しています。

$ systemctl cat test.service
# /etc/systemd/system/test.service
[Unit]
Description=per once script
After=cloud-init.target

[Service]
Restart=no
Type=simple
RemainAfterExit=yes
ExecStart=/root/per-once/scripts/per_once.sh

[Install]
WantedBy=cloud-init.target

image

参考情報

systemd-analyzeのオプションについては以下Webサイトの情報もご確認ください。

自作スクリプトの設定方法については以下弊社ブログもご参考ください。