Amazon Linux2 上で systemd を使ってサービスを運用する機会があったので備忘録。この記事で紹介しているコマンドで最低限の運用はできると思います。
目次
- systemd とは
- systemd は処理を unit という単位で管理する
- unit ファイルの保存先
- systemctl コマンド
- journalctl コマンド
- journalctl のログの右側が切れる場合は方向キーを使う
- 参考資料
systemd とは
systemd とは linux のシステムとサービスを管理するデーモンです。RHEL7、CentOS7、AmazonLinux2 などは、サービスの管理に systemd が使われています。ps コマンドで確認すると、プロセス番号 1 番で動作しているのが見えます。
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 125692 5560 ? Ss 9月17 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
systemd は処理を unit という単位で管理する
systemd は処理を unit という単位で管理します。たとえば nginx に対応する unit は以下のファイルに定義されています。
/usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
上記の nginx.service のファイルでは、プロセスの起動、停止のコマンドなどを定義しています。自分で何かサービスを作りたい場合は、この nginx の unit をベースにすると良いです。他にどんな記述ができるかは man systemd.service
コマンドで確認できます。
unit の type は service 以外にもいくつかあり、 man systemd.unit
コマンドで確認できます。
unit ファイルの保存先
unit ファイルの保存先は以下 2 箇所。
/usr/lib/systemd/system
インストール後の初期保存先。ここのファイルは編集しない。
/etc/systemd/system
ここにファイルを配置すると、初期の設定を上書きできる。自作の unit を作成する場合もここに置くと分かりやすい。
詳しくは man systemd.unit
コマンドで確認を。
systemctl コマンド
unit は systemctl コマンドで管理できます。詳細は man systemctl
コマンドで確認ができます。
systemctl [unitコマンド] [unit名]
Nginx を例にすると、よく使うコマンドは以下の通り。
unit 一覧を表示
systemctl list-units
unit 一覧を表示(サービスのみ)
systemctl list-units --type service
unit の起動状態を表示
systemctl status nginx.service
unit を起動
systemctl start nginx.service
unit を停止
systemctl stop nginx.service
unit の自動起動の状態を確認
systemctl is-enabled nginx.service
unit を自動起動するように設定
systemctl enable nginx.service
unit を自動起動しないように設定
systemctl disable nginx.service
unit ファイルを変更した後、変更を反映
systemctl daemon-reload
ちなみに systemctl status nginx
のように .service
は省略可能です。
journalctl コマンド
unit が標準出力したログは systemd journal に格納されます。journal に格納されたログは journalctl
コマンドで参照することができます。ログを確認するためによく使うコマンドは以下の通り。詳細は man journalctl
コマンドで確認を。
e オプションで最新の journal ログを表示する
journalctl -e
x オプションで詳細なログを表示
journalctl -ex
f オプションで最新ログを流し続ける(tail -f のイメージ)
journalctl -f
u オプションで特定の unit のログのみ表示する
journalctl -u nginx.service
k オプションでカーネルのログのみ表示する
journalctl -ek
journalctl のログの右側が切れる場合は方向キーを使う
1行に表示されるログが長い場合、表示されるログの折返しがされず、右側のログが切れてしまいます。この場合は ← キーと → キーで左右に移動し、切れたログを確認することができます。
参考資料
次回は firewalld のことを説明します。
-
-
最低限知っておきたいfirewalldの使い方
CentOS7 で firewalld を使う機会があり、調べたことの備忘録。zone の説明と、firewall-cmd のよくある使い方を解説します。 firewalld とは ...
続きを見る