お久しぶりです、masm11 です。 今更かと思いますが、今回から何回かに分けて、systemd について説明したいと思います。
systemd とは、Linux の init システムを置き換えるものです。 PID 1 として起動され、 サービスの管理やネットワークの管理、時刻の管理、 syslog の代替、cron の代替、果ては boot loader といった機能まで持ちます (これらの機能全てが PID 1 で実行されているわけではないです)。
今回は、systemd のコマンド systemctl について、サブコマンドをご紹介します。
list-unit-files
list-unit-files は、どんなサービスがあるのかを、列挙することができます。
luna:~ % systemctl list-unit-files | grep sshd.service
sshd.service enabled disabled
拡張子のように最後に .service
が付くものがサービスです。
.service
の他にも .timer
や .socket
などもあります。
これらを unit file と呼び、次回以降に紹介します。
start/stop/restart
各 unit file を start や stop することができます。
luna:~ % sudo systemctl start sshd.service
サービスを起動/停止するイメージですが、タイマー等も start することができます。
サービスを start した時にどんなコマンドが実行されるかは、 unit file の中に書いてあります。
enable/disable
各 unit file は enable や disable することができます。
enable しておくと、次回 boot 時に自動的に start されます。
luna:~ % sudo systemctl enable sshd.service
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
luna:~ %
この出力の通り、実は enable はシンボリックリンクで表現されていますので、 単にシンボリックリンクを張ることでも同じことができます。
status
サービスの状態を表示することができます。
luna:~ % systemctl status sshd.service ● sshd.service - OpenSSH Daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-09-23 21:20:18 JST; 1h 10min ago Main PID: 1130 (sshd) Tasks: 1 (limit: 18425) Memory: 1.5M CGroup: /system.slice/sshd.service └─1130 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups 9月 23 21:20:18 luna systemd[1]: Started OpenSSH Daemon. 9月 23 21:20:18 luna sshd[1130]: Server listening on 0.0.0.0 port 22. 9月 23 21:20:18 luna sshd[1130]: Server listening on :: port 22.
Loaded:
行の中央やや右寄りの enabled
が enable してあるかどうかを表示しています。
右端の vendor preset: disabled
はデフォルトで enable か disable かを表示しているだけですので、
間違えないようにしましょう。
Active:
行の running
は実行中であることを示しています。
一度実行してすぐ終了するサービスもあって、そういうものは exited
になっていますので、
running
以外だから即異常、というわけではありません。
最後の3行は sshd に関するログを表示しています。
mask/unmask
「この unit file 要らない!」と思ったら、mask することができます。
luna:~ % sudo systemctl mask sshd.service Created symlink /etc/systemd/system/sshd.service → /dev/null.
これもシンボリックリンクを張っているだけですので、 シンボリックリンクを張れば同様のことができます。
ところで、サービスが要らないなら disable すればいいじゃん、と思いませんか? 実は disable できないサービスも存在するのです。 そんな時には mask が役に立ちます。
daemon-reload
unit file を書き換えてもすぐには反映されません。
reboot するか、systemctl daemon-reload
することで反映されます。
よく忘れて戸惑います。気をつけましょう…
list-timers
.timer
という種類の unit file があります。要するに cron の代替機能です。
各タイマーが、最近いつ発動して、次にいつ発動するのか、等を表示することができます。
luna:~ % systemctl list-timers -a NEXT LEFT LAST PASSED UNIT ACTIVATES Thu 2020-09-24 00:00:00 JST 1h 18min left Wed 2020-09-23 00:00:00 JST 22h ago man-db.timer man-db.service Thu 2020-09-24 00:00:00 JST 1h 18min left Wed 2020-09-23 00:00:00 JST 22h ago shadow.timer shadow.service Thu 2020-09-24 00:00:00 JST 1h 18min left Wed 2020-09-23 00:00:00 JST 22h ago updatedb.timer updatedb.service Thu 2020-09-24 21:57:52 JST 23h left Wed 2020-09-23 21:35:20 JST 1h 5min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service 4 timers listed.
-a
を付けると、stop 状態のタイマーも表示してくれます。
私は常に -a
を付けることにしています。
最初に紹介した list-unit-files についてもそうなのですが、 私は「いいから全部出せ!」と思っていて、多すぎたら grep で必要な行だけ抽出する、というやり方をしています。
まとめ
systemd について、今回は概要っぽくサブコマンドについてご紹介しました。
サブコマンドは他にもまだまだありまして、今回紹介したのは私がよく使うものだけに絞りました。
先程改めて man systemctl
したところ、
全然記憶にないものがいろいろありました。おそらく時々増えているのでしょう。
今後も増えていくでしょうから、時々は man を確認してみるのが良さそうです。
次回は unit file の .service
について紹介したいと思います。
ではまた。