筆者はsystemdどころかinit自体よくわからない状態からスタートしています。
- 従来のSysVinitやUpstart(RHEL6における実装)に代わるサービス管理のアーキテクチャー。
- Fedora15で採用後、2014年リリースのRHEL7(CentOS7)でも正式採用、事実上の標準となりつつある。
従来
-
/sbin/init
が/etc/inittab
に記載された各ランレベルごとの設定に従ってすべてのプロセスをrcスクリプトによって起動していく。 - rcスクリプトの実体は
/etc/init.d
内のシェルスクリプトのシンボリックリンク。/etc/init.d
はservice
コマンドでの起動終了等でも操作しているもの(実際は直接スクリプトを叩くのとservice
コマンドとでは差異がある模様で、直接だとカレントの環境を使ってしまうので望まぬっ結果となる可能性があるらしい)。 - この他にも
/sbin/init
にはデバイスの読み込みやらファイルシステムのマウントやら、起動時に必要な処理が様々組み込まれている。 - SysVinitはPIDを直接には知らず、PIDファイルを介してアクセスしている。
systemd
-
/sbin/init
が実行していた処理をUnit単位で分割、並行起動できるようにしている。 - Unit定義ファイルの実体は2箇所に存在。
- システムデフォルトは
/usr/lib/sytemd/system
配下 - 管理者がカスタマイズする内容は
/etc/systemd/system
配下 - 従ってデフォルト設定を変更する場合は前者から後者のパスへコピーして編集すればよい
- システムデフォルトは
- Unitの種類は拡張子によって判別でき、サービスを管理する
.service
、マウントポイントを表す.mount
、デバイスに対応した.device
等がある。 - Unit間は依存関係を定義できる。ひとつはUnitファイル内の[Unit]セクションにて、
Wants=
やRequire=
オプションで定義すること。もうひとつはそのUnitの名を関したwants
ディレクトリ内に、依存するUnitのシンボリックリンクを置くこと。 - 前後関係の定義は同じく[Unit]セクションの
After=
とBefore=
オプションを使用する。 - Unitにはデバイスやマウントポイントも存在しているので、これらを対象とした依存関係も書くことができる。
起動時のプロセス
- systemdが
default.target
を起動する。これはmulti-user.target
やrescue.target
のシンボリックリンクであり、従来のランレベルに相当する。 - 例えば
multi-user.target
が呼ばれた場合、/etc/systemd/system/multi-user.target.wants
ディレクトリ内の各サービスを起動する。これらは各service unitのシンボリックリンクに相当する。つまりサービスの自動起動化とは、このシンボリックリンクを張ることに相当している(systemctl enable
コマンドの出力を見るとわかる)。 - その後は各Unitの前後関係、依存関係に基づいて起動処理が実行されていく。
操作
Unitの操作にはsystemctl
コマンドを使用する
-
start/stop
起動終了 -
reload/restart
設定ファイルの再読み込み、サービスの再起動 -
enable/disable
自動起動の有効化無効化(chkconfigにあたる) -
mask/unmask
サービス自体の有効化無効化(unmask状態だと起動不可となる) -
status
状態確認 -
list-unit-files
全ユニット表示 -
list-units
起動中のユニット表示
ランレベル変更に相当するdefault.target
のターゲット変更にはset-default
を用いる。
# systemctl set-default multi-user.target
Unitファイルに変更を加えた際はdaemon-reload
で変更内容を読み込ませる。
# systemctl daemon-reload
Unitファイルの作成
- Unitファイルは自分で書くことももちろんできる。
- 参考:Linux - systemdの*.serviceファイルの書き方 - Qiita
未消化
- プロセス管理にはcgroupsを用いているらしいがよくわからない。
- journaldがsyslogに代わって使われているらしいが、そもそもsyslogからよくわかってない。
参考
- Windowsユーザーに教えるLinuxの常識(10):Linux起動の仕組みを理解しよう[init/inittab編] (1/2) - @IT
- Windowsユーザーに教えるLinuxの常識(最終回):Linux起動の仕組みを理解しよう[rcスクリプト編] - @IT
- systemdを本番運用してわかったこと - mixi Engineers' Blog
- Linux女子部 systemd徹底入門 正直これだけ読んでてもよいのではないかという細かいまとめ
- systemd - ArchWiki ArchWikiは元来Arch Linuxの設定に向けたWikiだが、Linux全般的な情報が集まっていて重宝する