こんにちは、リナックス先生です。第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の軽量化・要塞化」に役立ちます。
systemdの思想と機能 Linuxを支えるシステム管理のためのソフトウェアスイート 【電子書籍】[ 森若 和雄 ] 価格:3080円 |
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」
技術スキルを活かす
「ITエンジニア転職」

コメント