1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート2)
  4. スーパーサーバーとプロセスについて

LinuC Level1 v10.0 対策コース(パート2)23/29

スーパーサーバーとプロセスについて

今回は、スーパーサーバーや初期化プロセスについて解説します。

Linuxシステムには、デーモンという常駐プログラムがあります。

スーパーサーバー(スーパーデーモン)とは、その他のデーモンに代わってポートを監視し、クライアントからのリクエストがあるとすぐに対応するデーモンを起動するプログラムです。詳しくはこちらの記事で解説しています。

https://envader.plus/course/12/scenario/1147

初期化プロセスについて

ここからは、初期化プロセスに関するファイルとコマンドについて解説します。

init

Linuxでは多くのプロセスが実行されますが、全てのプロセスの親プロセスがinitというプロセスです。

カーネル起動後、まずinitが起動します。その後initが他の子プロセスを起動し、システムを管理します。

psコマンドでinitを調べると、PID: 1と表示されます。PID: 1は最初に起動・実行されたプロセスのIDを表します。

ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Sl     0:02 /init

/etc/init.d/

/etc/init.d/ ディレクトリには、サービス(デーモン)の起動とその後の動作を制御するシェルスクリプトが格納されています。

initでは、まず /etc/rc.d ディレクトリの下にある/etc/init.d/ の中のサービスを起動するためのシンボリックリンクを読み込みます。シンボリックリンクはSやKから始まる名前で、Sはサービスの開始(start)、Kはサービスの停止(stop)を表します。

# /etc/rc2.dの例を見てみます。
l /etc/rc2.d                                                                                                                │yusuke   17900  0.0  0.0   2612   576 pts/7    T    May31   0:00 vimtu
total 8.0K                                                                                                                               │yusuke   17905  0.0  0.1  21376  6804 pts/7    T    May31   0:00 vim
drwxr-xr-x   2 root root 4.0K May 14 12:23 .                                                                                             │yusuke   18104  0.0  0.0   2612   504 pts/7    T    May31   0:00 vimtu
drwxr-xr-x 111 root root 4.0K May 15 04:36 ..                                                                                            │yusuke   18110  0.0  0.1  21376  7084 pts/7    T    May31   0:00 vim
lrwxrwxrwx   1 root root   29 Mar 16 17:30 K01apache-htcacheclean -> ../init.d/apache-htcacheclean                                       │yusuke   22348  0.0  0.0  16284  3712 pts/8    Ss   May30   0:01 zsh
lrwxrwxrwx   1 root root   17 Mar 16 17:30 S01apache2 -> ../init.d/apache2

これらのシンボリックリンクは、chkconfig(RedHat系ディストリビューション)やupdate-rc.d(Debian系ディストリビューション)を使用し自動で生成することができます。

しかし、initの弱点としては、スクリプトを一つひとつ実行するためシステムの起動に時間がかかること、またスクリプトにミスがある場合に予想外の挙動を示す可能性があるということが挙げられます。

Upstart

Upstartでは、initを使用しますが、依存関係を設定しサービスの並列起動ができます。また、イベント駆動型であるため、システム起動時に必要のない処理を切り出すことができ、従来よりシステム起動時間が短縮されました。

ここでのイベント(event)とは、ファイルシステムのマウントやシステムの再起動など、何かしらの変化のことを指します。

イベント駆動とは、initなどイベントの発生をきっかけとし、処理を実行することを指します。

実行する処理は、サービス(デーモンなどの常駐プログラム)とタスク(実行後に終了する処理)があります。これらの処理をひとまとめにしジョブ(job)と言います。ジョブは並列実行が可能です。

しかしUpstartはサービス単位で処理を実行するため、それ以上に処理を細分化することができませんでした。そこで、その問題を解決するためにsystemdが開発されました。

systemd

systemdはinitの代わりにsystemdプロセスを初期化プロセスとして起動します。

# initのパスを調べます。
which init
init not found

systemdでは、以下のプロセスを起動します。

デーモン名説明
systemd-initdメインプロセス
systemd-journaldログ(journal)を管理する
systemd-logindユーザーのログインを管理する
systemd-networkdネットワークを管理する
systemd-resolved名前解決を行う
systemd-timesyncdシステム時間やタイムゾーンを制御する
systemd-udevdデバイスマネージャで、デバイスの動的検知システムとして/dev配下の処理を行う

systemdの特徴は、多数のUnitといった処理単位に分割し管理することです。

Unit

Unitは役割によって種類が分かれています。

Unit説明
serviceサービスを管理(起動・停止。再起動)する
target複数のUnitをグルーピングする
mountファイルシステムをマウントする
automount自動的にマウントされるポイントを定義する
device管理対象となるデバイスを定義する
swapスワップ領域を有効にする
timer定期実行するような処理を管理(起動・停止・再起動)する
socketソケットを作成しリッスンする
path特定のファイルやディレクトリを監視し、イベント発生時(ファイルが作成されたとき)に特定のサービスを実行する

systemdプロセスが起動されると、default.targetUnitが実行されます。default.targetは、システムの基本的なサービスを順次実行していきます。

また、Unitは依存関係とは別に起動順序が指定できます。

つまり、systemdを使用することで、細分化されたUnitによりさらに効率的に処理を実行でき、システムの起動時間を大幅に短縮できます。

systemctlコマンド

systemdの操作はsystemctlコマンドで行ないます。systemctlコマンドは、サブコマンドと組み合わせて実行します。

systemctl [サブコマンド] [Unit名] [Unitの種類(任意)]

サブコマンド

サブコマンド説明
start指定したUnitを起動する
stop指定したUnitを停止する
restart指定したUnitを再起動する
reloadサービスの設定ファイルをリロードし、新しい設定を適用する
status指定したUnitの稼働状況を表示する
is-active指定したUnitが稼働しているか否かを確認する
enableシステム起動時に指定したUnitを自動的に起動する設定をする
disableシステム起動時に指定したUnitが自動的に起動しないようにする設定をする
mask指定したUnitが手動で起動(systemctl start)できないように無効化する
unmask指定したUnitの手動起動無効化設定(マスク)を解除する
list-dependencies指定したUnitの依存関係を表示する
list-units起動している全てのUnitの状態を表示する
list-unit-files全てのUnitを表示する
get-defaultdefault.targetのリンク先を表示する
set-defaultdefault.targetのリンク先を設定する
rebootシステムを再起動する
poweroffシステムをシャットダウンする

serviceコマンド

service コマンドは主にDebian系列やRed Hat系列などのディストリビューションでサービスを管理するために使われます。

service [Unit名] [サブコマンド]

サブコマンド

サブコマンド説明
start指定したUnitを起動する
stop指定したUnitを停止する
restart指定したUnitを再起動する
status指定したUnitの稼働状況を表示する

新しいシステムでは通常、より強力な systemctl コマンドが推奨されます。しかし、古いスクリプトや互換性を保つために、 service コマンドも依然として広く使われています。

まとめ

この記事では、スーパーサーバーと初期化プロセスについて解説しました。スーパーサーバーは、他のデーモンに代わってポートを監視し、クライアントからのリクエストがあるとデーモンを起動するプログラムです。

初期化プロセスには、initUpstart 、そして systemd があり、それぞれがシステムの起動やデーモン管理に関する機能を持っています。 systemd は、効率的な処理の実行を可能にし、システムの起動時間を短縮します。 systemctl コマンドや service コマンドを使用して、 systemd を操作することができます。

記事の内容は理解できましたか?