最低限知っておきたいsystemctlとjournalctlの使い方

systemd
Amazon Linux2 上で systemd を使ってサービスを運用する機会があったので備忘録。この記事で紹介しているコマンドで最低限の運用はできると思います。

目次

  1. systemd とは
  2. systemd は処理を unit という単位で管理する
  3. unit ファイルの保存先
  4. systemctl コマンド
  5. journalctl コマンド
  6. journalctl のログの右側が切れる場合は方向キーを使う
  7. 参考資料

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 は以下のファイルに定義されています。


$ cat /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 コマンドで管理できます。


$ systemctl [unitコマンド] [unit名]

Nginx を例にすると、よく使うコマンドは以下の通り。詳細は man systemctl コマンドで確認ができます。

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行に表示されるログが長い場合、表示されるログの折返しがされず、右側のログが切れる。この場合は キーと キーで左右に移動することができる。

参考資料

関連記事