【第4回】systemdと現代的なサービス管理:依存関係の制御と自動復旧のプロ技術

こんにちは、リナックス先生です。第3回ではDNF 5を使ったパッケージ管理をマスターしましたね。ツールがインストールできたら、次はそのツールを「サービス(常駐プログラム)」として正しく管理し、24時間365日安定して稼働させる必要があります。

第4回のテーマは、Linux OSの管理における事実上の最高権力者、「systemd」です。AlmaLinux 10では最新のsystemdが採用されており、より高度なリソース制限やセキュリティ機能が強化されています。サーバーが起動してから各サービスがどのような順番で立ち上がるのか、そして万が一サービスが落ちたときにどうやって自動復旧させるのか。その仕組みを完全に理解しましょう。

コウ君

先生、Apacheをインストールして systemctl start httpd を打てば動くことは覚えたんですけど……。たまに「Active: failed」って出て止まっちゃうことがあるんです。どうして止まったのか、どうやって直せばいいのか、もっと詳しく知りたいです!

リナックス先生

いいところに気がついたわね、コウ君。プロの現場では「止まったから手動で再起動する」なんて悠長なことはしていられないの。systemdには、なぜ止まったのかを記録するログ機能や、自動で蘇生させる「自己修復」の設定があるのよ。今日はsystemdをあなたの最強の味方にする方法を教えるわね!

【全8回】AlmaLinux 10 徹底攻略:次世代サーバー構築・運用講座

  • 第1回:AlmaLinux 10 爆速構築編
  • 第2回:初期設定と次世代セキュリティ編
  • 第3回:DNFとパッケージ管理の深淵編
  • ▶ 第4回:systemdと現代的なサービス管理編(今ここ!)
  • 第5回:ネットワーク制御とnftables編
  • 第6回:Web・DBサーバー構築(LEMPスタック)編
  • 第7回:パフォーマンス分析とリソース監視編
  • 第8回:自動化とバックアップの極意編

1. systemdとは何か?OS起動のメカニズム

systemdは、Linuxのカーネルが起動した直後に、OSが最初に実行するプロセス(PID 1)です。すべてのプロセスの「親」であり、システムのあらゆるリソースを管理します。

以前のLinux(CentOS 6以前など)で使われていた「SysVinit」という仕組みは、サービスを一つずつ順番に起動していたため、起動に時間がかかっていました。systemdは、サービス同士の依存関係を解析し、可能な限り「並列」に起動させることで、AlmaLinux 10の高速なブートを実現しています。

Unit(ユニット)という考え方

systemdでは、管理対象を「Unit」という単位で扱います。

  • .service:一般的なサービス(Apache, MariaDBなど)
  • .target:複数のUnitをまとめた「状態」(マルチユーザーモードなど)
  • .timer:cronのように定期実行を管理するもの

実務で最も触れるのは .service ユニットです。これを理解することが、サーバー管理の第一歩となります。


2. 実務で使い倒すsystemctlコマンド虎の巻

日常の運用で使う systemctl コマンドを整理しましょう。プロは単に起動・停止するだけでなく、その「状態」を詳細に読み解きます。

2-1. 基本操作

# サービスの起動
sudo systemctl start httpd

# サービスの停止
sudo systemctl stop httpd

# サービスの設定再読み込み(プロセスを殺さずに設定変更を反映)
sudo systemctl reload httpd

# サービスのステータス確認(ここが最重要!)
systemctl status httpd

2-2. 自動起動の設定

# OS起動時に自動で立ち上がるようにする
sudo systemctl enable httpd

# 自動起動を解除する
sudo systemctl disable httpd

# 自動起動が有効かどうか確認する
systemctl is-enabled httpd

💡 プロのノウハウ:maskコマンドの活用
実務で「このサービスは絶対に使わないし、他のサービスの依存関係で勝手に起動されても困る」という場合は sudo systemctl mask サービス名 を実行します。これは disable よりも強力で、シンボリックリンクを /dev/null に向けることで、物理的に起動不能にします。不要なサービスを徹底的に削ぎ落とす「OSの軽量化・要塞化」に役立ちます。


3. 止まらないサービスを作る:Unitファイルの自作と自動再起動

ここからが本題です。自分で作ったプログラムや、標準では自動復旧しないサービスを「絶対に死なない」ように設定してみましょう。

Unitファイルは /etc/systemd/system/ に作成します。今回は例として、自作のバックアップスクリプトをサービス化し、「もしクラッシュしても5秒後に自動で蘇生する」設定を盛り込みます。

自作Unitファイルの例 (/etc/systemd/system/myapp.service)

[Unit]
Description=My Custom Application Service
After=network.target

[Service]
Type=simple
User=engineer
ExecStart=/usr/local/bin/myapp.sh
# 異常終了時に再起動する設定
Restart=always
# 再起動までの待ち時間
RestartSec=5s
# セキュリティ:このサービスに与える権限を制限する
PrivateTmp=true

[Install]
WantedBy=multi-user.target

設定の反映手順

# 新しく作ったファイルをsystemdに認識させる
sudo systemctl daemon-reload

# 起動と自動起動設定
sudo systemctl start myapp
sudo systemctl enable myapp

⚠️ トラブルシューティング / 注意点
Unitファイルを編集した後は、必ず systemctl daemon-reload を実行してください。これを忘れると、systemdは古い設定メモリを参照したまま動作し、「書き換えたはずなのに動きが変わらない!」という落とし穴にハマります。


4. 現場の流儀:journalctlによる高度なログ解析

systemdが管理するサービスは、標準出力やエラー出力をすべて journald というログ収集機構に送ります。これを閲覧するのが journalctl コマンドです。

# 特定のサービスだけのログを時系列で見る
journalctl -u httpd

# リアルタイムでログを監視する(障害調査の基本!)
journalctl -f

# 今日のログだけを抽出する
journalctl --since today

# カーネルのログだけを見る
journalctl -k

# ログの保存容量を制限する(ディスク満杯防止)
sudo journalctl --vacuum-time=2w

💡 プロのノウハウ:エラーだけを絞り込む
journalctl -p err と打つことで、Priority(優先度)が Error 以上のものだけを表示できます。サーバーにログインした直後、まずこのコマンドを叩いて「何か悪いことが起きていないか」を1秒で確認するのがデキるエンジニアの習慣です。


5. まとめと次回予告

第4回、お疲れ様でした!今回の学びで、あなたはAlmaLinux 10のサービスを完全に支配下に置きました。

  • systemd はPID 1として、すべてのプロセスとUnitを並列管理する。
  • systemctl status で得られる情報は障害調査の第一歩。
  • Restart=always 設定により、不慮の事故で落ちたサービスを自動復旧できる。
  • journalctl を使いこなせば、OS内部で起きた真実を即座に特定できる。

サービスが正しく動き始めたら、次に考えるべきは「外からのアクセスをどう制御するか」です。ネットワークの門番をマスターしなければ、どんなに堅牢なサービスも攻撃の餌食になってしまいます。

次回の第5回は、「ネットワーク制御とnftables編」です。AlmaLinux 10の裏側で動く最新のパケットフィルタリング技術を、firewalldを介して、時には直接コマンドを叩いて攻略しましょう。お楽しみに!

▼ サーバー構築・開発を学ぶならVPSで ▼

エンジニア必須の環境
「おすすめVPS」

VPSランキングを見る

技術スキルを活かす
「ITエンジニア転職」

転職エージェントを見る

コメント