概要
EC2で稼働するWebサーバー
を構築しました。
構築〜起動手順をレビュー依頼をしたところ、エンジニアから以下の指摘を受けました。
「起動処理をsystemd
で管理すると良いかも」
確かに...!
systemd
サービス定義を自作する経験がなかったため、備忘録も含め本記事を執筆することにしました。
前提知識
前提知識について触れておきます。
systemd とは?
Linux
の起動処理やシステム管理を行う仕組み。
systemd
にプログラムを登録しておくことで、Linux
起動時に自動で任意のプログラムを実行することができる。
参考
systemd でプログラムを管理するメリット
- WEBサーバーの起動など、
EC2
再起動時にも実行しておきたいプログラムなどを登録する -
OOM Killer
(Out-Of-Memory Killer)によるプロセス停止時も再起動される
OOM Killerとは?
Linuxのメモリ管理機構の一部であり、システムが利用可能なメモリを使い果たした際に、システム全体の安定性を維持するために自動的にプロセスを終了させる仕組み。
システムがメモリ不足(Out of Memory
, OOM
)状態に陥った際、どのプロセスを終了させるかを判断し、選定されたプロセスを強制終了する。
[hands-on] WEBサーバーの起動をsystemdで管理する
WEBサーバーの起動は Ruby
スクリプトで実行しています。
以下実行コマンドを systemd
で管理していきたいと思います。
/usr/bin/ruby deploy_server.rb
1. サービスファイルの作成
サービスファイルは/etc/systemd/system
配下に作成します。
sudo vi /etc/systemd/system/deploy_server.service
2. サービスファイルの編集
Unit, Service, Install の定義を行います。
[Unit]
Description=Deploy Server Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=ec2-user
WorkingDirectory=/home/ec2-user/
ExecStart=/usr/bin/ruby deploy_server.rb
Restart=on-failure
[Install]
WantedBy=multi-user.target
解説
-
After=network-online.target
- ネットワーク接続確立後にコマンドを実行する
-
WorkingDirectory
- コマンドディレクトリ
-
ExecStart
- 実行スクリプト
-
Restart=on-failure
- プロセスが異常終了した場合、リスタートする
3. systemd
のリロード
sudo systemctl daemon-reload
4. サービスの有効化
sudo systemctl enable deploy_server.service
5. サービスの起動
sudo systemctl start deploy_server.service
6. サービスの動作確認
sudo systemctl status deploy_server.service
まとめ
サービスが起動されていることを確認してください。