gabuLog

趣味と考え事をつらつらと

サービスの管理について

 

サービス管理の仕組み

システム起動時のシステムの設定やサービスの管理はsystemdが行う。

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

systemctlによるサービスの管理

systemdはユニットでシステムの管理を行う。

ユニットは12種類存在する。

ユニットの種類と説明
ユニット 説明
service デーモンの起動・停止
socket サービス起動のためのソケットを受信
device サービス起動のためのデバイスを検知
mount ファイルシステムのマウント
automount ファイルシステムのオートマウント
swap スワップ領域の設定
target ユニットのグループ

サービスの起動・停止・状態確認するコマンド

systemctlコマンド

systemstl [サブコマンド] [サービス]

systemctlの主なサブコマンド
サブコマンド 説明
start ユニットの起動
restart ユニットの再起動
stop ユニットの停止
status ユニットの状態確認
enable ユニットをenable状態にする。これにより、システム起動時にユニットは自動で開始。
disable ユニットをdisable状態にする。これにより、システム起動時にユニットは自動で停止。
isolate ユニット及び依存関係にあるユニットを開始し、他のユニットを全て停止する。(稼働中のターゲットを変更する時に使用)
list-units アクティブな全てのユニットを表示する。

 

systemctlの主なサービス
サービス 説明
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/ディレクトリ配下にある、デバイス用のファイルを動的に作成・削除するサービス。

system-udevdサービスのシーケンス

system-udevdサービスのシーケンス
/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メッセージ]

shutdownコマンドのオプション
オプション 説明
-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,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:システム全体の権限を制御するためのアプリケーション開発キット。これにより特権をもたないプロセスが、特権を持つプロセスと通信することが可能になる