技術ブログ

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

2019年9月21日

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

/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
最低限知っておきたいfirewalldの使い方

CentOS7 で firewalld を使う機会があり、調べたことの備忘録。zone の説明と、firewall-cm ...

-技術ブログ
-

© 2020 karakaram-blog