サービスの管理について

サービス管理の仕組み
システム起動時のシステムの設定やサービスの管理はsystemdが行う。
システムが起動したら、systemctlコマンドによりD-Bus(Desktop Bus)を通じてsystemdにメッセージを送信することでサービスの起動や停止を行っている。

systemctlによるサービスの管理
systemdはユニットでシステムの管理を行う。
ユニットは12種類存在する。
| ユニット | 説明 | 
|---|---|
| service | デーモンの起動・停止 | 
| socket | サービス起動のためのソケットを受信 | 
| device | サービス起動のためのデバイスを検知 | 
| mount | ファイルシステムのマウント | 
| automount | ファイルシステムのオートマウント | 
| swap | スワップ領域の設定 | 
| target | ユニットのグループ | 
サービスの起動・停止・状態確認するコマンド
systemctlコマンド
systemstl [サブコマンド] [サービス]
| サブコマンド | 説明 | 
|---|---|
| start | ユニットの起動 | 
| restart | ユニットの再起動 | 
| stop | ユニットの停止 | 
| status | ユニットの状態確認 | 
| enable | ユニットをenable状態にする。これにより、システム起動時にユニットは自動で開始。 | 
| disable | ユニットをdisable状態にする。これにより、システム起動時にユニットは自動で停止。 | 
| isolate | ユニット及び依存関係にあるユニットを開始し、他のユニットを全て停止する。(稼働中のターゲットを変更する時に使用) | 
| list-units | アクティブな全てのユニットを表示する。 | 
| サービス | 説明 | 
|---|---|
| udisk2 | ディスクの自動マウントサービス | 
| gdm | GDMディスプレイマネージャ | 
| lightdm | LightDmディスプレイマネージャ | 
| NetworkManager | NetworkManagerマネージャ | 
| ssh | SSHサービス | 
| postfix | Postfixサービス | 
| http | HTTPサービス | 
サービス設定ファイル
サービス設定ファイルは/usr/lib/systemにサービス名.serviceとして置かれている。
サービス設定ファイルのオプションにより、起動するサーバプログラムや停止のためのコマンドを指定している。
| オプション | 説明 | 
|---|---|
| ExecStart | 起動するプログラムを必要な引数をつけて絶対パスで指定 | 
| ExecReload | 設定ファイルの再読込をするコマンドを必要な引数をつけて絶対パスで指定 | 
| ExecStop | ExecStartで指定したプログラムを停止するのに必要な引数をつけて絶対パスで指定 | 
systemctlによって変更できない重要なサービス
systemdは立ち上げの段階で3つのサービスを開始する。
- systemd-journald.service
 - systemd-udevd.service
 - systemd-logind.service
 
これらのサービスは状態(STATE)がstatic(静的)状態になっており、enable(有効)/disable(向こう)状態にできない。
system-udevd.serviceについて
デバイスにアクセスするためのdev/ディレクトリ配下にある、デバイス用のファイルを動的に作成・削除するサービス。

/lib/udevd/rule.dディレクトリ
デフォルトのUDEVルールを記述したファイルが配置されている。
カスタマイズしたい場合は/etc/udevd/rule.d配下のファイルを編集する。
/etc/udevd/rule.dディレクトリ
カスタマイズされたUDEVルールを記述したファイルが配置されている。
system-logind.serviceについて
ユーザーのログインを管理するサービス。
ユーザーセッションの追跡及び、セッションで生成されるプロセスの追跡、PolicyKit*1ベースでの認可、デバイスへのアクセスに対する認可などを行う。
システムの再起動と停止
ファイルシステムのマウント、ネットワークの起動、webサービスの起動など、システム設定やサービスの管理をグループ化して定義したものがターゲット。
再起動や停止もターゲットの一つ。
| ターゲット | 説明 | SysV ランレベル | 
|---|---|---|
| halt.target | 停止 | ー | 
| poewroff.target | 電源オフ | 0 | 
| Ereboot.target | 再起動 | 6 | 
システム再起動や停止のターゲット変更は、systemctlコマンドにより行う。
systemctlはD-Busを介してsystemdにメッセージを送信する。受信したsystemdは並列に書くユニットの停止処理を行い、その中で依存関係にあるユニットについては起動時と逆の順に停止する。
initコマンド
systemdへのシンボリックリンク。プロセス制御、ランレベルを変更するコマンド。
D-Busを介することなく直接systemdを実行する。
マシンの電源オフ
shutdown [オプション] [停止時間] [wallメッセージ]
| オプション | 説明 | 
|---|---|
| -H --halt | マシンの停止 | 
| -P --poweroff | マシンの電源オフ(デフォルト) | 
| -r --reboot | マシンのリブート | 
| -h | --halt外指定された時以外は、--poweroffと同じ | 
| -k | halt,poweroff,rebootは実行せず、wallメッセージのみを送信 | 
| --no-wall | halt,poweroff,rebootの実行前にwallメッセージを送信しない | 
| -c | シャットダウンのキャンセル | 
マシンの再起動と停止
halt [オプション]
poweroff [オプション]
reboot [オプション]
| オプション | 説明 | 
|---|---|
| --halt | halt,poweroff,rebootいずれの場合も停止 | 
| -p --poweroff | halt,poweroff,rebootいずれの場合も電源オフ | 
| --reboot | halt,poweroff,rebootいずれの場合もリブート | 
| -f | systemdを呼び出すことなく直ちに実行 | 
-fオプションは一部のでーたが失われる危険性があるため、通常は使用を避けたほうが良い。各サービスの終了を待たずにシステム停止したい場合に使用。
ランレベルの表示と移行
runlevel [オブション] ランレベル
| ランレベル | 説明 | 
|---|---|
| 0 | シャットダウン(システムの停止) | 
| 1 | シングルユーザーモード(rootのみ) | 
| 2 | ネットワークなしのマルチユーザーモード | 
| 3 | 通常のマルチユーザーモード(テキストログイン) | 
| 4 | 未使用 | 
| 5 | グラフィカルログインによるマルチユーザーモード | 
| 6 | システムの再起動 | 
まとめ
PCの起動のみでも多種多様なサービスが複雑に起動しているんだなぁと。
全て理解するのは無謀すぎるから、なんとなく「あー、こんなん動いてんねや」ぐらいの認識でいこうかな。
資格取るとなるとそういう訳にはいかないけど、今はいいかな。
*1:システム全体の権限を制御するためのアプリケーション開発キット。これにより特権をもたないプロセスが、特権を持つプロセスと通信することが可能になる