linuxの初期化システム「systemd」の特徴

`systemd` は、Linuxで使用される最新の初期化システム（initシステム）であり、プロセス管理やサービスの制御、システム全体の起動を効率的に行うために設計されています。従来のSysVinitやUpstartに代わるもので、多機能かつ柔軟性が高いことが特徴です。

以下に、`systemd` の主な特徴を説明します。

---

## **1. 主な特徴**

### **並列処理による高速なシステム起動**

- `systemd` はサービス間の依存関係を自動的に解析し、可能な限りサービスを並列で起動します。
- 従来のSysVinitと比べて起動時間を大幅に短縮できます。

### **ユニット（Unit）ベースの管理**

- `systemd` では、すべての管理対象（サービス、ソケット、デバイス、タイマーなど）を「ユニット」として扱います。
- ユニットには複数の種類があり、それぞれ専用の拡張子（例: `.service`, `.socket`）で管理されます。

### **依存関係の自動管理**

- サービスやリソース間の依存関係を定義することで、起動順序や停止順序を自動的に管理。
- ユニットファイルで明示的に依存関係を記述可能（例: `Requires=`, `Wants=`, `Before=`, `After=`）。

### **統一されたサービス管理ツール**

- `systemctl` コマンドを使って、サービスの開始・停止、再起動、状態確認、ログ取得などを統一的に管理。

### **ターゲット（Target）による状態管理**

- ターゲット（例: `multi-user.target`, `graphical.target`）を使用して、システム全体の状態を管理。
- 従来のランレベル（runlevel）に相当するもの。

### **ジャーナリングシステム**

- `journald` による統一されたログ管理を提供。
  - システム全体のログを一元管理。
  - `journalctl` を使用してログを簡単に検索・フィルタリング可能。

### **タイマー（Timer）機能のサポート**

- `cron` のように時間ベースのタスクスケジューリングが可能。
- タイマーユニット（`.timer`）で細かいスケジュールを設定。

### **カスタマイズと拡張性**

- 各ユニットの設定を自由にカスタマイズ可能。
- ユニットファイルを追加・修正して、独自のサービスやリソースを管理。

### **動的なデバイス管理**

- `udev` と統合されており、動的にデバイスの検出と設定を行う。

---

## **2. ユニット（Unit）の種類**

`systemd` が管理するユニットには、以下のような種類があります。

| ユニットタイプ | 拡張子 | 役割|
| --- | --- | --- |
| サービス | .service | デーモンやバックグラウンドプロセスを管理|
| ソケット | .socket | ネットワークソケットやIPCソケットを管理|
| タイマー | .timer | 時間ベースのタスクスケジューリング|
| ターゲット | .target | システムの状態やグループを定義（ランレベルに相当）|
| デバイス | .device |デバイスファイル（例: /dev）を管理|
| マウント | .mount | ファイルシステムのマウントポイントを管理|
| スワップ | .swap |スワップスペースの管理|
| パス | .path |ファイルやディレクトリの監視|
| スライス | .slice | リソースの割り当てや制限（cgroupsの管理）|
| スコープ | .scope | 外部プロセスのグループ管理|

## **3. 起動ターゲット（ランレベル）**

従来のランレベルは、`systemd` ではターゲットとして置き換えられています。

| 従来のランレベル | systemd | ターゲット |
| --- |--- |--- |
| 0 | poweroff.target | システムの電源オ |
| 1 | rescue.target | シングルユーザーモ |
| 3 | multi-user.target | マルチユーザー |
| 5 | graphical.target | マルチユーザー |
| 6 | reboot.target | システムの再起動 |

## **4. コマンド例**

`systemctl` を使った `systemd` の操作例をいくつか挙げます。

### サービス操作

| 操作| コマンド例 |
| --- | --- |
| サービスの開始 | systemctl start nginx.service |
| サービスの停止 | systemctl stop nginx.service |
| サービスの再起動| systemctl restart nginx.service |
| サービスの状態確認 | systemctl status nginx.service |
| 自動起動の有効化| systemctl enable nginx.service |
| 自動起動の無効化| systemctl disable nginx.service |

### **システム操作**

| 操作 |  コマンド例 |
| --- |--- |
| システムの再起動 |  systemctl reboot|
| システムのシャットダウン |  systemctl poweroff|
| サスペンドモード |  systemctl suspend|
| ハイバネートモード | systemctl hibernate|

### **ターゲット操作**

|操作 | コマンド例|
| --- | --- |
|ターゲットの確認 | systemctl list-units --type=target|
|ターゲットの切り替え | systemctl isolate multi-user.target|

## **5. メリット**

1. **高速なシステム起動**
   並列処理と依存関係管理により、従来のinitシステムよりも高速に起動。
2. **柔軟な設定とカスタマイズ**
   ユニットファイルを通じて、サービスやリソースの詳細な制御が可能。
3. **統合管理ツール**
   `systemctl` を使って、サービス、ターゲット、ログ、依存関係などを一元的に管理。
4. **ログ管理の一元化**
   `journalctl` によるシステム全体のログの一元管理。
5. **信頼性と安定性**
   プロセスやサービスの監視が組み込まれており、障害発生時に自動で再起動可能。

---

## **6. 注意点**

1. **複雑さ**
   機能が多いため、初心者には設定やトラブルシューティングが難しい場合がある。
2. **旧システムとの互換性**
   従来のSysVinitスクリプトが必要な場合、対応が難しいことがある。
3. **リソース消費**
   機能が多い分、リソースの消費がやや多い。

---

`systemd` は、Linuxシステムのプロセスやリソースの管理を効率的に行うための強力なツールです。柔軟性と拡張性が高く、特に大規模な環境や複雑な依存関係を持つシステムにおいて非常に有用です。