Linux シャットダウン時の「停止ジョブが実行中です」エラーのトラブルシューティング

Linux シャットダウン時の「停止ジョブが実行中です」エラーのトラブルシューティング

Linuxディストリビューションのシャットダウン中に「停止ジョブが実行中です」というメッセージが表示されたことはありますか?あなただけではありません。この通知は、システムのシャットダウンプロセスを最大90秒間停止させることが多く、多くのユーザーを困惑させています。

安全機能の理解

まず第一に、「停止ジョブが実行中です」というメッセージは、システムの不具合ではなく、組み込まれた安全機能として機能することを認識することが重要です。

Ubuntu、Fedora、ArchなどのLinuxディストリビューションは、起動とシャットダウンのシーケンスを管理するためにsystemdを活用しています。シャットダウンを開始すると、systemdは突然電源を切るのではなく、アクティブなすべてのサービスとアプリケーションにSIGTERMと呼ばれるシグナルを送信します。理想的なシナリオでは、各プログラムはこのシグナルを受信し、データを保存し、ファイルを適切に閉じることができます。

ただし、一部のサービスでは処理の完了に時間がかかる場合があり、信号に迅速に応答しない可能性があります。この遅延により、警告メッセージが表示されます。一般的な原因としては、以下のようなものが挙げられます。

  • ネットワーク管理者
  • コンテナサービス
  • ユーザーセッション
  • ネットワークマウントドライブ

多くのユーザーは「停止ジョブが実行中です」というメッセージをシステムの不具合の兆候と捉えますが、この動作はsystemd開発者によって意図的に設計されました。基本的に、90秒間の待機時間は、サービスが未完了のタスクを完了する時間です。この時間内にタスクが完了しない場合、systemdはSIGKILLを使用して強制的にタスクを終了し、シャットダウン処理を続行します。

この制御されたシャットダウンにより、アプリケーションはファイルのクローズからデータベーストランザクションの完了、ファイルシステムのアンマウントに至るまで、あらゆる操作を完了できます。この待機時間を短縮してシャットダウンを迅速化することは可能ですが、データの損失や破損のリスクが生じ、ファイルシステムの安定性が損なわれる可能性があります。

デフォルトのタイムアウトの調整

標準の90秒のタイムアウトは、ほとんどのサービスのクリーンアップニーズに対応しているため、古いハードウェアを使用しているユーザーには適しています。しかし、より新しいシステムを使用している場合、この時間は長すぎると感じるかもしれません。

幸いなことに、システムの設定を変更してタイムアウト時間を短縮することで、シャットダウンプロセスを高速化することができます。保留中のサービスに正確な時間制限を指定することも可能です。

まず、ターミナルを開き、お気に入りのテキスト エディターを使用してシステム構成ファイルを調整します。

sudo nano /etc/systemd/system.conf

ファイルを開いたら、タイムアウト変数を探してください。様々なグローバル設定が見つかるでしょう。「」という行を見つけてください#DefaultTimeoutStopSec=90s。ハッシュ記号があるということは、この行がコメントアウトされていることを示しており、システムがデフォルト設定の90秒に従っていることを意味します。

この設定を変更するには、ハッシュ記号を削除し、値を希望の期間に変更します。

重要:この値を0に設定すると、タイムアウトが無期限になり、プロセスが終了するまでシステムが無期限に停止することになります。通常、20~30秒程度の妥当な範囲が妥当な妥協点となります。

変更が完了したら、保存してエディターを終了します。これらの変更を適用するには通常、マシンの再起動が必要です。再起動時に再度長い待ち時間が発生する場合がありますが、次回の起動時には新しいタイムアウト設定が反映されます。

タイムアウトが問題を示している場合

通常、停止ジョブのタイムアウトは想定内の動作です。ただし、遅延が続く場合は、特に同じサービスのシャットダウンが継続的に長引く場合、根本的な問題が示唆される可能性があります。考えられる原因としては、ネットワークマウントが到達不能、デーモンの設定ミス、サービスが停止信号に応答しないなどが挙げられます。

シャットダウンプロセスに異常に長い時間(数秒ではなく数分)がかかっている場合は、異常を調査することをお勧めします。まれな遅延は通常は問題になりませんが、頻繁に発生する場合は注意が必要です。

どのサービスが速度低下の原因となっているかを特定するには、長時間のシャットダウンから再起動した後にログを確認します。

journalctl -b -1 -e

このコマンドは、前回の起動時のログを取得し、末尾まで移動します。スクロールすると、強制的に停止されたサービスに関連する警告やタイムアウトメッセージが見つかります。

検索をさらに絞り込むには、次のものを使用して警告レベルのメッセージをフィルタリングできます。

journalctl -b -1 -p warning

さらに、次の systemd コマンドを使用することもできます。

systemd-analyze blame

このコマンドは通常、起動時に効果を発揮しますが、起動時に動作が遅いサービスは、シャットダウン時にも同様の挙動を示すことがよくあります。「ジョブ停止」通知をトリガーする可能性のある一般的なサービスには、以下のものがあります。

  • ネットワークサービス
  • NFSやSMBなどのリモートファイルシステム
  • データベースサーバー
  • 仮想マシンおよびコンテナマネージャー
  • 外付けドライブと自動マウントサービス

ネットワークベースのマウントに依存するサービスは、接続が不安定な場合、特に遅延の影響を受けやすくなります。シャットダウンのタイムアウトを短縮することでシャットダウンを迅速化できますが、遅延の原因となっているサービスの問題自体には対処できません。根本原因に対処することで、より持続可能な解決策が生まれます。

結論

Linuxは、ユーザーにシステムに対する強力な制御機能を提供しており、制御の難しいサービスのシャットダウンタイミングを管理する機能も備えています。バックグラウンドアプリケーションを最適化し、不要なサービスを無効化することで、シャットダウンと起動の効率を向上させることができます。

出典と画像

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です