systemd

systemdとは?

systemdはLinuxオペレーティングシステムのシステムおよびサービスマネージャである。起動時に最初のプロセスとして実行されると(PID 1として)、ユーザー空間のサービスを立ち上げて維持するinitシステムとして動作する。Linuxカーネルが起動するとカーネルの初期化が行われ、その最終段階でPID1の/sbin/initを生成します。/sbin/initは/lib/systemd/systemdへのシンボリックリンクです。

systemdのプロセス間の通信

systemdのプロセス間通信(IPC: Inter-Process Communication)は、主に以下の2つのメカニズムを通じて行われます:

  • Unixソケット
  • D-Bus

Unixソケット

Unixソケットは、同じコンピュータ上で動作するプロセス間の通信(IPC: Inter-Process Communication)を実現するためのメカニズムです。ソケットはファイルの一種として扱われ、通常ファイルシステム上に特別なファイル(ソケットファイル)として存在します。

1. 主な特徴

  • ローカル通信: 同じマシン内での通信に使われます。
  • 低オーバーヘッド: ネットワークソケットに比べて通信のオーバーヘッドが少ないです。
  • ファイルシステムに統合: /tmp/や/var/run/などのディレクトリにソケットファイルが存在します。

2. Unixソケットを使用した通信

  • ソケットアクティベーション:systemdが特定のソケット(Unixソケットやネットワークソケット)を監視し、リクエストが来た時に対応するサービスを起動する仕組みです。これにより、サービスは必要なときにだけ起動され、リソースの節約が可能になります。
  • ソケットユニットとサービスユニットの連携:systemdのユニットファイルには、サービスユニット(.service)とソケットユニット(.socket)があります。ソケットユニットはソケットを定義し、対応するサービスユニットを指定します。
  • ソケットユニット(.socketファイル)は、systemdにおいてソケットを管理するためのユニットファイルです。ソケットユニットは、特定のソケット(Unixソケットやネットワークソケット)を定義し、そのソケットがアクティブになったときに対応するサービスを起動します。これを前述のソケットアクティベーションと呼びます。

systemctl コマンド

systemctl は systemd の管理コマンドで、サービスやユニットの操作、システムの制御を行うために使用されます。以下では、systemctl コマンドの基本的な使い方と主要な機能について説明します。

書式

systemctl [OPTIONS…] COMMAND [UNIT…]

コマンド

コマンド説明実行例
start指定されたサービスを起動します。systemctl start apache2
stop指定されたサービスを停止します。systemctl stop apache2
restart指定されたサービスを再起動します。既に起動している場合は一度停止してから再度起動します。systemctl restart apache2
reload指定されたサービスの設定を再読み込みします。サービス自体は停止せずに設定のみを再読み込みします。systemctl reload apache2
status指定されたサービスのステータスを表示します。状態やログの概要を確認できます。systemctl status apache2
enable指定されたサービスをブート時に有効にし、次回のシステム起動時に自動的に起動するように設定します。systemctl enable apache2
disable指定されたサービスをブート時に無効にし、次回のシステム起動時に自動起動しないように設定します。systemctl disable apache2
is-active指定されたサービスがアクティブかどうかを確認します。systemctl is-active apache2
is-enabled指定されたサービスがブート時に有効かどうかを確認します。systemctl is-enabled apache2
rebootシステムを再起動します。すべてのユーザーとプロセスに通知し、システムを再起動します。systemctl reboot
poweroffシステムをシャットダウンし、電源を切ります。すべてのユーザーとプロセスに通知し、システムをシャットダウンします。systemctl poweroff
suspendシステムをサスペンド状態にし、RAM に現在の状態を保存して最低限の電力を使用します。systemctl suspend
list-units現在ロードされているユニットの一覧を表示します。systemctl list-units
daemon-reloadユニットファイルの変更を反映するために systemd マネージャーを再読み込みします。systemctl daemon-reload

systemctlの実行例

サービスの起動

sudo systemctl start firewalld.service

サービスの情報確認。現在はactive

sudo systemctl status firewalld.service

サービスの停止

下記コマンドを実行後、再度ステータスを確認すると「inactive」になっていることが確認できます。

sudo systemctl stop firewalld.service

システム起動時にfirewalld.serviceが起動しないように変更

Loadedの箇所が「disabled」となっていることが確認できます。

sudo systemctl disable firewalld.service

システム再起動

sudo systemctl reboot

再起動後、firewalld.serviceが起動していないことを確認できます。


コメント

タイトルとURLをコピーしました