Server Build Exercises on AWS (Amazon Web Services) 2022 edition

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 する:-)とよいでしょう

Last updated on 5 Dec 2021
Published on 5 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.