概要
systemdは、システム起動プロセスを効率的に管理し、実行中のサービスを監督し、システムのさまざまな状態を制御する上で中心的な役割を果たします。initがスクリプトを順次実行する方式とは異なり、systemdは依存関係に基づいてサービスを並列処理することで、起動速度を大幅に向上させます。これは、現代のLinuxシステムのパフォーマンスと安定性に貢献する重要な要素です。
主な特徴
systemdの主な特徴は以下の通りです。
- 並列起動: サービス間の依存関係を分析し、複数のサービスを同時に実行することで起動時間を短縮します。
- 統合管理: システム起動、サービス、デバイス、ログなど、さまざまな要素を単一のフレームワークで管理します。
- サービス監視: サービスが失敗した場合に自動的に再起動するなど、安定した運用を支援します。
- ランレベルの代替: ランレベル(runlevel)の代わりに「ターゲット(target)」という概念を導入し、システムの状態を制御します。
initとの関係
systemdは、従来のinitシステムの後継であり代替です。initが実行していたシステム起動および終了の役割を継承し、より優れた機能を追加しました。
- init: 最初に実行されるプロセスで、起動時に`/etc/inittab`ファイルを参照し、ランレベルに従ってスクリプトを順次実行しました。
- systemd: こちらもPID 1番のプロセスですが、ランレベルの代わりに「ターゲット」を使用し、依存関係に基づいてサービスを並列処理するため、より高速で柔軟です。
- 互換性: 現代のほとんどのLinuxシステムでは、initはsystemdへのシンボリックリンクとして接続されており、initコマンドを使用してもsystemdが代わりに動作します。
主要な概念
systemdを理解するために不可欠な主要な概念です。
ユニット(Unit)
systemdが管理するすべてのオブジェクト(サービス、マウントポイント、デバイスなど)は「ユニット」として定義されます。各ユニットは、特定のタスクを定義する設定ファイル(`*.service`、`*.mount`など)を持ちます。
- Service Unit: ウェブサーバー(nginx.service)やデータベース(mysql.service)のようなバックグラウンドプロセスを管理します。
- Target Unit: 複数のユニットをグループ化する役割を果たします。ランレベルを代替する概念で、「multi-user.target」はマルチユーザーモード、「graphical.target」はグラフィカルモードを意味します。
- Mount Unit: ファイルシステムのマウントポイントを管理します。
systemctl
systemdを制御する主要なコマンドラインユーティリティです。サービスの開始、停止、再起動、またはユニットの状態確認に使用されます。
- サービスの開始: sudo systemctl start nginx
- サービスの状態確認: sudo systemctl status nginx
- システムの再起動: sudo systemctl reboot
journalctl
systemdで統合的に管理されているシステムログを照会するコマンドです。サービス別、時間別、優先度別にログをフィルタリングして確認できます。
- すべてのログを表示: journalctl
- 特定のサービスログを表示: journalctl -u nginx.service
- リアルタイムログを表示: journalctl -f
使用例
systemdの主要コマンドであるsystemctlとjournalctlの使用例です。
システム起動ターゲットの確認
systemctl get-default
システムがどのターゲットで起動されたかを確認します。
システムシャットダウン
sudo systemctl poweroff
systemdを介してシステムを安全にシャットダウンします。poweroffコマンドと同じ機能を実行します。
特定のサービスの有効化/無効化
sudo systemctl enable nginx
sudo systemctl disable nginx
システム起動時に特定のサービスが自動的に開始されるように設定したり、無効にしたりします。
サービスの再起動
sudo systemctl restart nginx
実行中のウェブサーバーサービスを再起動します。設定ファイルを変更したときに便利です。
ヒントと注意事項
systemdを使用する際に知っておくと良い点です。
ヒント
- systemdのユニットファイルは、主に`/etc/systemd/system/`または`/lib/systemd/system/`ディレクトリに配置されます。
- systemdは、ほとんどの起動/終了関連コマンドを統合して管理します。したがって、`halt`、`reboot`、`poweroff`などは`systemctl`へのシンボリックリンクであることが多いです。
- `systemctl status`コマンドを使用すると、サービスの状態だけでなく、最近のログも一度に確認できます。