created: 2022-11-14T14:02:58.195Z

ソフトウェアデザインのsystemd実践入門メモ(1)

ソフトウェアデザイン2018年2月号の「systemd実践入門」を読んでメモ。

systemd 以前の仕組みとの比較

systemd の以前の仕組みでは /etc/inittab の定義にしたがってシェルスクリプトが実行され、システムに必要がプロセスが順次起動されていた。

Linux では PID1 (システムで最初に起動するプロセス) は init プロセスだが、systemd はこのエイリアスになっている。すなわち、システムで一番最初に起動するデーモンは systemd であり、systemd が systemd 専用のルールで書かれた設定ファイルによって、システムに必要なプロセスが起動されていく。

このやり方の違いによって得られる恩恵は2つある。

  • 順番に実行されるシェルスクリプトによってプロセスが起動するわけではないので、起動時に並列で処理を実行したりして起動時間を短縮できる
  • 基本的にはシェルスクリプトはたくさんプロセスを生成して処理を実行していくものなので、systemd のやり方のほうが起動までに実行されるプロセスが少なくて済む(もちろん消費リソースも少ないし起動も早い)

プロセス管理

cgroup を利用している。

  • もともとはコンテナ向けの機能
  • プロセスに割り当てるCPUやメモリを制御するソフトウェア
  • プロセス管理にも使われている
    • プロセスがクラッシュした時の情報収集や再起動
    • プロセスの安全な終了

ユニットとは

サービスやターゲットなど、systemd が管理するリソースの総称のこと。

  • service
    • デーモンプロセス
  • target
    • 複数のユニットをグループにしたもの
  • socket
    • ネットワークのことだけでなく、IPCやFIFOの定義もこれで行う
  • path
    • 指定パス配下を監視して変更イベントに応じて処理を実行する

それ以外にも device, mount, swap といったリソースも systemd のユニットとして管理することができる。