created: 2022-11-15T14:33:53.122Z

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

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

デーモンの管理

systemd ではデーモンプロセスの管理のために、 xxxx.service といった命名のファイルにデーモンの起動など諸々の設定を定義することになっている。

サービスファイルの置き場所は2種類

  • /usr/lib/systemd/system 配下はパッケージが提供する定義
  • /etc/systemd/system はシステム管理者が独自の定義をしたいときの置き場所

セクション

サービスファイルにはセクションがいくつかある。

Service セクション

  • ExecStart といった項目で起動コマンドを定義
  • プロセス内で利用する環境変数もこのサービスファイルに記述
  • Linux の namespace を使って tmpfile のディレクトリを用意したりもする

なお、systemd では起動/停止/再起動以外の操作はこの Service セクションに定義しない。 $ systemctl configtest xxxx.service などといった独自のサブコマンドを定義したい場合は別途シェルスクリプトを所定の場所において実現することになる。

Unit セクション

サービスはユニットのひとつなので、もちろん Unit セクションもサービスファイルに記述することになる。

Unit セクションはユニットがどのような依存/順序関係を持っているかを定義するものが多い。

  • Requires そのユニットが動作するために必要なユニットを列挙する項目
    • たとえば sshd の場合はネットワーク機能のユニットが動作している必要がある
    • ここにかかれた依存ユニットが起動に失敗すると当該ユニットも起動はfailとなる
  • Wants は同様に依存するユニットを定義するものだが、依存がfailしても作動させられるようなものを記述する

その他 Before After など順序を定義する項目もある。

Install セクション

そのサービスの有効/無効の管理をどうするかを記述するところ。

  • Alias はenable(有効)状態のときに、そのしるしにシンボリックリンクを置く場所を定義する
  • WantedBy RequiredBy などといった設定項目もあって、これも依存周りのため明示的にシンボリックリンクをおくものらしい(利用例があまりイメージできていない)