lpic 101 - level 1に合格したけど、実務で使えそうな知識をまとめてみる【systemd編】
先日lpic level 1 101試験を合格したのだけど、非常に勉強になったし、いままで触れていたlinuxの周辺技術の理解を更に深めることができた。
その中には実務で役立ちそうだなと思ったものもあれば、そうでないものもあったのだけど、せっかく役立つ方をまとめておけば、今後のためにもなりそうだったのでブログに書いておこうかと思った。
今回は、システムアーキテクチャの章で出てくる systemd
辺りの話をまとめておこうと思う。
systemdとは?
ググれば幾らでも出てくる。自分なりにまとめてみると、linuxシステムで起動処理や起動時の設定などを行ってくれるシステムの一つ。SysVinit
やUpstart
などもあるがsystemd
はそれらを更に改良したシステムで、自分が勉強した限りでは現在界隈で一番主流になっているシステム。
systemd
のおかげで今まで直列型のようにシステムを起動していたのが、並列型のように起動できるようになったのでシステム起動が早くなったりした。また、いろいろなシステムの処理の設定・管理をUnit
という単位で管理してくれたり、Service UnitをCLIから管理するためにsystemctl
というコマンドも用意されていて、サービスの起動・停止・再起動などを行える。
webサービスを触っていて「nginxを再起動したいけど、どうするのかな」と思い、ググった結果「systemctl restart nginx
でできるよ」と書いてる記事があったり、そうでない記事があったりで、自分はよく混乱したけど、systemctl
を利用しているのは「systemdで管理しているnginx serviceをsystemctl
で再起動する」ということ。linuxの知識が薄い自分にとっては、systemctl
の正体を知るキッカケになった。
Unit
systemdはUnit
と呼ばれる単位で処理を分けているといったが、このUnit
もいくつか種類がある。service
, swap
, target
’, device
, mount
が主な種類。特にwebサービスを触っているエンジニアなら、Service Unitを触る機会が多いはずで、linuxシステム上で管理している各種サービスはだいたいここに属するはず。
Unit
の実態になる設定ファイル(Unitファイルと呼んだりする)は、/etc/systemd/system
以下、もしくは/usr/lib/systemd/system
以下にxxxx.service
という拡張子で置かれている。ちなみにシステム起動時には、前者から後者の順で適用される。*1
実際にxxxx.service
ファイルの中身を見てみるとわかるのだが、そのサービスがインストールされたときの挙動や、systemctl restart
,systemctl reload
などのコマンドを送ったときの挙動が定義されていたりする。つまり、「systemctl hogefuga service
を叩くと、どういった挙動になるのか?」は、Unitファイルを参照すると色々なことがわかるというわけ。
Unitという概念で各種サービスを管理してて、どこに設定ファイルがあるのか?これを知れただけでも、個人的に非常に勉強になった。
最近、Consulを通してどういったserviceが動いていて、それらserviceはどういった設定になっているのかをxxxx.service
を見に行ったりする機会があり、ちょうど勉強した内容について触れられたのも良かった。多分、今後も役立ちそうな知識だ。
systemctlコマンド
man systemctl
すると色んなオプションやサブコマンドがあるけど、まあ自分レベルが実務で今すぐ使えそうなのはこのくらいかなと思う。
- systemctl start
- systemctl stop
- systemctl restart
- systemctl reload
- systemctl status
- systemctl is-active
- systemctl enable
- systemctl disable
- systemctl list-unit-files
is-active
はstatus
があるので、ほとんど使う機会がないかも知れない。
enable
,diable
は実際に叩いてみるとわかるのだけど、起動しているTarget
配下にシンボリックリンクを作る or 削除することで、次回のシステム起動時に指定したserviceを自動起動するのかどうかを設定できる。
Target
は、Unitの種類の一つで、複数Unitをグループ化してくれる。主にmulti-user.target
やrescue.target
などのターゲットに分けられ、これをsystemdの起動時に最初に読み込む/etc/systemd/system/default.target
へシンボリックリンクを貼れば、linux起動時に指定のtarget
(ランレベル)を指定して、グルーピングされたUnitも順次起動するという仕組み。つまり、システム起動時にどんなサービスが自動起動するのだろう?というのを知りたければ、目当てのtarget
の設定ファイルとディレクトリを見に行けば良い。
list-unit-files
は知らなかったのだけど、unitを一覧で見れて、覚えておくと使い所はありそうな感じ。
systemd-journald
systemdのプロセスには主に
- メインプロセスである`systemd``
- ログを管理するプロセス
systemd-journald
- ログイン処理プロセス
systemd-logind
- デバイスの検知プロセス
systemd-udevd
などが存在する。
この中で特に実務で使いそうなのが、ログを管理するsystemd-journald
だと思う。サービスが予期せぬ事で停止してしまった時や不具合が起きた時にログを確認して、原因究明に役立てる。実際、このプロセスに対して指示を出すのは、systemctl
と同じようにjournalctl
というのがあり、それを使う。lpic101 level1ではよく出る題目ではないが、journalctl -xe
とか、journalctl -u xxxx.service
などを叩く機会は多いかと思う。
自分も実務で「start叩いてるのに、なんかミドルウェアが起動しない!!」という場面があったりした時にお世話になった。各種サービスのログは、主にjournald
プロセスで管理していて、journalctl
で見たりできることを覚えていれば、システム不具合等の時の調査で役立てられるはずだ。
———————
systemdは結構前からあるシステムで、ググったりすると私、systemd嫌いみたいなタイトルの記事も出てきたりで、良きところもあれば悪いところもあるらしい。でも、linux初学者の自分にとってLinuxシステムがどういった仕組みで動いているのかの基本的な内容を知れたのは、めちゃくちゃ良かった。
次はunixコマンドを辺りで、実務で役立ちそうな内容をまとめたいと思う。