System V, systemd and Upstart
Controlling Linux Services
Init Process
Linux システムの init プロセスは、一般的にすべてのプロセスの母体として知られています。 init」プロセスは常にプロセスIDが「1」(pidが1)で、システム上のカーネルによって最初に起動されるプロセスです。initは初期化の略で、他のすべてのプロセスとデフォルトのランレベルを起動するために使用されます。
SysV – System V
Linux ディストリビューションが「SysV」規格を採用している場合、init は「/etc/inittab」と呼ばれるファイルを調べます。 このファイルには、システムを起動するためのデフォルトのランレベルが書かれています。 例えば、”id:3:initdefault: “とすると、ランレベル3のディレクトリ構造にあるすべてのスクリプトを自動的に起動します。
ランレベル1 – シングルユーザーモード
ランレベル2 – ランレベル3と同じだが、NFSがない
ランレベル3 – マルチユーザーとネットワークモード
ランレベル4 – 未使用
ランレベル5 – ランレベル3と同じだが、グラフィカルなデスクトップ(X window System)
ブートプロセスの詳細については、こちらをご覧ください。
「System V」のinitスクリプトを実行する
管理者としてかなりの頻度で、特定のサービス/デーモンを停止、開始、再起動、またはリロードする必要があります。 そのためには、「service」というコマンドを使います。 このコマンドは、通常「/etc/init.d」ディレクトリ内にある「System V」スクリプトを実行することができます。
serviceコマンドの例
ステータスの確認。 ここでは、「sshd」デーモンの現在のステータスを要求しています
# service sshd statusopenssh-daemon (pid 1599) is running...
すべてのプロセスのステータスを確認します。 すべての init スクリプトをアルファベット順に status オプションを付けて実行します。 以下は、このコマンドの出力の抜粋です:
# service --status-allabrt-ccpp hook is installedabrtd (pid 1708) is running...abrt-dump-oops (pid 1716) is running...acpid (pid 1487) is running...atd (pid 1740) is running...auditd (pid 1262) is running...automount (pid 1571) is running...avahi-daemon (pid 1375) is running...Usage: /etc/init.d/bluetooth {start|stop}certmonger (pid 1752) is running...cpuspeed is stoppedcrond (pid 1724) is running...cupsd (pid 1476) is running...dnsmasq is stoppedfirstboot is not scheduled to runhald (pid 1496) is running...
Stop: ここでは、「sshd」デーモンの停止を要求しました。 また、新しい状態を確認するために、statusオプションを発行しました。
# service sshd stopStopping sshd: # service sshd statusopenssh-daemon is stopped
Start: 今回は「sshd」を起動するように要求しています。
# service sshd startStarting sshd:
Restart: 今回は、「sshd」デーモンを「バウンス」(停止してからすぐに再起動すること)します。
# service sshd restartStopping sshd: Starting sshd:
リロード。
# service sshd reloadReloading sshd:
Upstart
Upstart は、「init」デーモンのイベントベースの代替品です。 Upstartは、Ubuntuを提供している有名な会社(Canonical)の元社員によって書かれました。 Upstartの背後にあるアイデアは、開始されたタスクが次のタスクを開始する前に完了しなければならないという伝統的な開始プロセスから離れることでした。 Upstartは、システムイベントに非同期的に対応できるイベント駆動型システムです。 アップスタートは、ブートとシャットダウン時にサービスとタスクの開始と停止を担当します。 また、これらのサービスやタスクを積極的に監視します。 また、アップスタートは sysvinit スクリプトを変更せずに実行することができます。 RHEL、CentOS、Fedora など、様々なディストリビューションが System V の代替として Upstart を搭載してきました。 しかし、これらのシステムの多くは現在「systemd」に移行しています。
先ほど見たように、System V では「service」コマンドでサービス/デーモンを制御できますが、Upstart では別のコマンドを使用します。 アップスタートで使用されるコマンドは「initctl」です。 このコマンドは、init デーモンと通信することができます。 以下は、使用中の “initctl” コマンドのいくつかの基本的な例です。
initctl コマンドの例
Status Check:
root@john-desktop:~# initctl status cupscups start/running, process 672
最初にジョブ名が与えられ、次に現在のゴールとインスタンスの状態、そしてプロセスID番号が与えられます。
Stop: “stop “オプションは、希望する状態が「停止」であることを指定します。
root@john-desktop:~# initctl stop cupscups stop/waiting
Start: start “オプションは、指定されたジョブの新しいインスタンスを開始します。
root@john-desktop:~# initctl start cupscups start/running, process 3574
Restart: このオプションは、指定されたジョブが再起動することを意味します。
root@john-desktop:~# initctl restart cupscups start/running, process 3606
Reload: このオプションは、指定されたインスタンスをリロードします。
root@john-desktop:~# initctl reload cups
List: List は、すべてのジョブ/インスタンスとそれらに関連するステータスを表示するように要求します。 以下は、このコマンドの出力からの抜粋です:
root@john-desktop:~# initctl listavahi-daemon start/running, process 611mountall-net stop/waitingnmbd stop/waitingpasswd stop/waitingrc stop/waitingrsyslog start/running, process 601tty4 start/running, process 1080udev start/running, process 437upstart-udev-bridge start/running, process 429
Reload Configuration: このオプションは、initデーモンが設定ファイルを再読み込みすることを要求します。
root@john-desktop:~# initctl reload-configuration cups
通常であれば、「init」は「inotify」で設定ディレクトリを監視し、変更があった場合には自動的にリロードするので、上記のリロードコマンドを発行する必要はありません。
systemd
systemdはSystem Vのもう一つの代替品です。systemdはsystem daemonの略です。
systemd
systemdはSystem Vの代替品です。 Fedora, Mandriva, Mageia, Arch Linux.
「System V」や「Upstart」で見たように、どちらのタイプもサービスを制御するための独自のコマンドを持っています。 systemdも同様です。
「System V」や「Upstart」で見たように、どちらのタイプにもサービスを制御するための独自のコマンドがあります。 以下は、「systemctl」コマンドの基本的な機能のいくつかの例です。
systemdコマンド | 説明 |
---|---|
systemctl start mytest.service | 指定されたサービスを開始する |
systemctl stop mytest.service | 指定されたサービスを停止します |
systemctl status mytest.service | 指定されたサービスの状態を要求します |
systemctl list-unit-files –type=service | 起動や停止が可能な既知のサービスをリストアップします |
systemctl restart mytest.service | 指定されたサービスを起動してから停止します |
systemctl reload mytest.service | サポートされていれば設定ファイルを再読み込みします |
systemctl enable mytest.service | chkconfig mytest onに相当します |
systemctl disable mytest.service | chkconfig mytest offに相当 |
systemctl is-enabled mytest.service | サービスが現在のランレベルで起動するように設定されているかどうかをチェック |