systemdとsystemctl
プロセス番号1番は Unix で最初に生成される特別な役割を持つプロセスです。 歴史的に init (かつて /etc/init 4.4BSD 以降は /sbin/init)というソフトウエアですが、 最近の多くの distro では systemd というソフトウエアに置き換えてきています。 Unix プロセス群は木構造を構成するので、 木構造の一番上(root)が init もしくは systemd プロセスということです
init プロセスには大きく分けて3つくらいの役割があるのですが、
Linux 上での構築作業時に必要な知識は、
systemctl
というコマンドを使いsystemd経由でサーバプロセスの起動・停止を行う
ということです。
基本操作
起動 (スタート)
sudo systemctl start サーバ名
再起動 (リスタート)
sudo systemctl restart サーバ名
停止 (ストップ)
sudo systemctl stop サーバ名
状態の表示 (ステータス)
sudo systemctl status サーバ名
インストール
ふつうパッケージ管理システムがインストール時に必要な設定ファイルもシステムに入れ、 設定を行いますが、distro ごとに少しずつポリシーが異なるので注意してください
また、 自作のソフトウエアであれば、 必要な設定ファイルと起動設定の呪文も自分で作る必要があります。 これは www.py で行っているので参考にしてください
自作ソフトウエア用の systemd の設定
03_ec2/03-03_web.py/ ディレクトリ以下にある次の2つのファイルが systemd の設定です
03_ec2/03-03_web.py/scripts/install.sh
03_ec2/03-03_web.py/files/usr/local/lib/systemd/system/www.py.service
設定を入れるプロセスの詳細
03_ec2/03-03_web.py/files/usr/local/lib/systemd/system/www.py.service
ファイルを
/usr/local/lib/systemd/system/www.py.service
にコピーします。
その後、
03_ec2/03-03_web.py/scripts/install.sh
ファイルの最後の方にある
systemctl コマンドの呪文を2つ唱えます
sudo systemctl daemon-reload
sudo systemctl start www.py.service
daemon-reload は systemd に設定ファイル群を再読み込みさせる命令です。 単にファイルを作成しただけでは読み込まないため、 まずは daedmon-reload を唱える必要があります。
次に start 命令で www.py サービスをスタートさせます。
なお .service は省略可能なので
sudo systemctl start www.py.service
でも
sudo systemctl start www.py
でも大丈夫です。
この www.py の部分はサーバプロセスを識別するのに必須ですが、
既存の設定と衝突しなければ何をつけても大丈夫なんだと思います
ちなみに、スクリプトの最後にある status は現状表示をするための命令で、 これは必須でもなんでもありません。 このインストールスクリプトでは(デバッグをかねて)最後にステータス表示をしています
systemd ファイルの中身
/usr/local/lib/systemd/system/www.py.service というテキストファイルの中身は次のとおりです
[Unit]
Description=Exercises-AWS Python Application Example
Documentation= http://exercises-aws.fml.org/ja/appendix/python/
After=network.target auditd.service
[Service]
ExecStart=/var/www/libexec/www.py &
KillMode=process
User=ec2-user
Group=ec2-user
[Install]
WantedBy=multi-user.target
詳細は自分で systemd のドキュメントを読むなり google でもしてもらうとして、
[Service]
ではじまるブロックが肝心な部分です。
ExecStart=/var/www/libexec/www.py &
がサーバを起動するために実行するコマンドの定義です。 多くのサーバプロセスには次のユーザとグループの定義部分
User=ec2-user
Group=ec2-user
がありませんが、 www.py はユーザ root ではなく一般ユーザ ec2-user で動かしているので、この設定が必要です。
After と WantedBy も適切に設定する必要がありますが、よくわからないと思います。 /lib/systemd/system/ ディレクトリ以下に OS 標準のファイル群があります。 ここに ssh.service とか nginx.service とかあるはずなので、 それらを参考にする(copy & paste する:-)とよいでしょう