この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていたこと
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サイトの情報もご確認ください。
自作スクリプトの設定方法については以下弊社ブログもご参考ください。