Amazon Linux 2 でサービスの起動タイミングを確認したいのですがどうしたらいいですか?
困っていたこと
Amazon Linux 2 で 独自のユニットを登録していますが、起動タイミングを確認したいです。いい方法はありますか?
どう対応すればいいの?
systemd-analyzeコマンドでシステムの起動パフォーマンスの統計を確認することが可能です。
https://www.freedesktop.org/software/systemd/man/systemd-analyze.html
やってみた
実際に以下のブログのユニットファイルを設定して実際に確認しました。
こちらは、ネットワークが有効になった後で自作スクリプトを実行するユニットファイルを設定しています。 起動後にインスタンスにログインして以下コマンドを実行します。
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 ./
全体
After=network-online.target
と設定したとおり、network-online.target
のあとに実行されていることがわかります。
$ 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
参考情報
systemd-analyzeのオプションについては以下Webサイトの情報もご確認ください。
自作スクリプトの設定方法については以下弊社ブログもご参考ください。