最低限知っておきたいsystemctlとjournalctlの使い方
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 は以下のファイルに定義されています。
$ 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行に表示されるログが長い場合、表示されるログの折返しがされず、右側のログが切れる。この場合は ← キーと → キーで左右に移動することができる。