Linuxの起動スクリプト(SysVinit、Upstart、Systemd)についてまとめました。
Linuxの起動スクリプト(SysVinit、Upstart、Systemd)
Linuxの起動スクリプトは、SysVinit、Upstart、Systemdの3種類がある。
SysVinit
- SysVinitの特徴
- Linuxカーネルをロード後、init(最初のプロセス)が起動する。
- 「/sbin/init」はカーネルが使用するデフォルトの init プログラム。特定のランレベルに入った時、どのプログラムや スクリプトを実行するか init に指定する。
- 「/etc/inittab」は起動設定ファイル。「/sbin/init」は、この起動設定ファイルに従ってシステム・サービスを起動する。
- 「/etc/init.d」ディレクトリにある起動スクリプトを使用することで各種サービスが起動する(ランレベルによって起動サービスも異なる)。
- 「/etc/rc*.d」ディレクトリにあるスクリプトを使用することで、ランレベル毎のサービスを起動・終了する。
【SysVinitによる起動の流れ】
- initが、/etc/inittab を読み込む。
- initが、/etc/rc.sysinitスクリプトを実行。
- initが、/etc/rcスクリプトを実行。
- /etc/rcスクリプトが、/etc/rc(ランレベル).d ディレクトリ配下の起動スクリプトを実行。
Upstart
- Upstartの特徴
- SysVinitの代替となる「initデーモン(イベント駆動型のinit)」。
- 指定されたランレベルに必要なサービスを、サービスが起動できる状態になったタイミング(イベント:ハードウェアの変更、タスクの開始など)で起動・停止する。
- SysVinitは順番にサービスを起動するが、Upstartは並列で起動できるため全体的な起動時間が高速となる。
- 「/etc/event.d」ディレクトリにあるファイル群で定義された「イベント・ジョブ」を実行する。
- 「/etc/event.d」ディレクトリ内の各ファイルに「start on イベント名」という行があり、ここで指定されたイベントが発生すると、「exec コマンド名」という設定行で指定したコマンドが実行される。
systemd
- systemdの特徴
- 各処理をUnitで定義し、各Unitを指定して実行する。
- SysVinitやUpstartではシェルスクリプトで処理を逐次実行するが、systemdは処理を複数のUnitに分解して並列実行する。
- 「/usr/lib/systemd/system」に、デフォルトの定義ファイルが格納されている。
- 「/etc/systemd/system」に管理者が追加修正した定義ファイルを格納する。つまり、デフォルトの設定を変更する場合は、/usr/lib/systemd/systemのファイルをコピーして /etc/systemd/systemに保存して編集する形となる。デフォルトに戻したい場合は設定ファイルを「 /etc/systemd/system」から削除する。双方のディレクトリに同じファイル名があった場合、「/etc/systemd/system」が優先される。
主なUnit | 設定概要 |
---|---|
プロセス名.service | プロセスの起動・停止。(例:httpd.service、sshd.serviceなど) |
マウントポイント.mount | ファイルシステムのマウント・アンマウントに関する設定。/etc/fstabの内容を元にSystemdが自動作成。 |
.socket | ソケットの監視設定。例えば、あるソケットに接続されたら特定のプロセスを起動させるといったことができる。xinet.dの代替になる。 |
.device | システムが認識しているデバイス情報を保持。udevデーモンが自動作成。 |
.path | パスの監視設定。例えば、監視対象のディレクトリにファイルが置かれたらサービス起動といった動作を実現できる。 |
.target | 複数のUnitをまとめたUnit。Unit同士の依存や起動順定義を楽に管理できる。Systemdでは全てがUnitで処理され、ランレベル(プロセスの管理体系)がないため、ランレベルに相当する機能をtarget Unit を利用して実装する。つまり、Systemdでは、各プロセスをtargetでグルーピングし、レベル付けを行う。 |
.swap | スワップ領域の有効化。etc/fstabが自動作成。 |
主なtarget | 概要 | 従来のランレベル(RedHat系) |
---|---|---|
poweroff.target | システム停止 | 0 |
rescue.target | シングルユーザモード | 1 |
multi-user.targe | マルチユーザモード (コンソールログイン) | 3 |
graphical.target | マルチユーザ+GUI 5 | |
reboot.target | 再起動 | 6 |
emergency.target | 緊急シェル | None |
- default.target
- OSの起動シーケンスで一番最初に起動されるUnit。
- default.target に記述されている依存関係(シンボリックリンク)を満たすように、各種ユニットを起動する。
- defualt.target の実体はで、具体的な処理の中身はリンク先のターゲットによって決まります。
- default.target の依存関係(シンボリックリンク)は「systemctl get-default」コマンドで確認できる。一般的にGUIシステムだと「graphical.target」、GUI無しのシステムだと「multi-user.target」にリンクされている。
- default.target にリンクするターゲットを変更したい場合、「systemctl set-default リンク先」コマンドを使用する、例えば、「multi-user.target」に変更したい場合、「systemctl set-default multi-user.target」を実行する。
- 現在実行中のセッションで異なるターゲットユニットに変更したい場合、「systemctl isolate リンク先」コマンドを実行する。例えば、すぐに再起動するには、「systemctl isolate reboot.target」を実行する。
関連ページ
【LinuC】試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。
LPICの試験対策と例題まとめ
LPICの試験対策と例題(学習サイト)についてまとめました。
コメント