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が起動していないことを確認できます。

コメント