Linux運用中、systemd管理のサービスが
- 勝手に再起動している
- 停止していないのにPIDが変わっている
- ユーザー操作の記録がない
といった事象に遭遇することがあります。
本記事では、
- 「なぜ再起動したのか」を確定させる方法
- systemd / カーネル / アプリのどこが原因か
- どうなれば解決と判断できるか
を、journalctlを中心にした実務的な手順で解説します。
目次
まず確認すべき前提:再起動とクラッシュは別
systemd環境では、
- プロセスが落ちた
- systemdが再起動した
という2つのパターンがあります。
重要なのは、
「なぜ再起動したか」ではなく
「なぜ落ちたか/落とされたか」
を切り分けることです。
Step1:systemctlで再起動の事実を確認
systemctl status サービス名
ここで以下を確認します。
- Active: active (running)
- Main PID が変わっていないか
- Restarted at の表示
再起動履歴があれば、 「systemdが再起動した」ことは確定です。
Step2:journalctlで再起動前後のログを見る
journalctl -u サービス名 --since "YYYY-MM-DD HH:MM"
再起動時刻の
- 直前
- 直後
を必ず確認します。
ここで見るべきは、
- error / fatal / panic
- exit code
といった終了理由です。
代表的な原因とログの特徴
① プロセスが異常終了した(クラッシュ)
ログ例:
code=exited, status=1/FAILURE
この場合、
- アプリケーションエラー
- 設定ミス
が原因でプロセスが落ち、 systemdが再起動しています。
対策:
アプリケーションログ・設定ファイルを確認します。
② OOM Killerによる強制終了
ログ例:
Out of memory: Kill process xxxx (サービス名)
この場合、
- サービス自体は正常
- メモリ逼迫で殺された
という状態です。
対策:
メモリ使用量・swap挙動・OOMスコアを見直します。
③ systemdのRestart設定による再起動
ユニットファイルに
Restart=always
が設定されていると、
- exitコードに関係なく
- systemdが再起動
します。
対策:Restart=on-failure への変更を検討します。
④ Watchdogによる再起動
応答がない場合、 systemdのWatchdogが
- ハングと判断
- 再起動
するケースです。
ログには、
Watchdog timeout
と出ることがあります。
カーネル・OS起因かを確認する
journalctl -k --since "YYYY-MM-DD HH:MM"
以下があれば要注意です。
- I/O error
- hung task
- OOM Killer
OS起因の場合、 サービス側では解決しません。
どうなれば「解決」と判断できるか
以下を満たせば、
- 再起動原因が特定できた
- 再起動が再現しない
- ログに異常終了が出ない
状態となり、解決と判断できます。
原因不明のまま再起動が止まった場合は、 解決とは言えません。
まとめ
- 再起動の正体は「落ちた or 落とされた」
- journalctlで直前ログを見る
- OOM・Restart設定は最優先で疑う
- 原因が分かれば対処は明確
systemdサービスの再起動は、
必ず理由があります。
ログを正しく追えば、 「突然」ではなくなります。
あわせて読みたい


journalctlの実務的な使い方まとめ
systemd環境のLinuxでは、ログ確認といえば journalctl が基本です。 しかし実際の現場では、 ログが多すぎて追えない 何を見れば原因が分かるのか分からない 結局grep…
あわせて読みたい


スワップが使われ始めた時の正しい判断基準
Linuxサーバーを運用していると、 swap使用量が増えた freeコマンドでswapが減っている といった状況に遭遇することがあります。 このとき、 「swapが使われた=即障害…
あわせて読みたい


CPU idleが高いのに遅い原因
サーバーが遅いと感じて確認すると、 CPU idle が高い CPU使用率も低い それでもレスポンスが悪い この状態は、 Linux運用で最も混乱しやすいパターンの一つです。 本記…
