Linux でサービスの自動再起動をする方法

Linuxシステムでは、サービス(またはデーモンとも呼ばれます)がウェブホスティング、データベース管理、ネットワーキングなど、さまざまなタスクを処理する上で重要な役割を果たしています。しかし、サービスは時々エラーやリソースの高負荷、予期せぬシステムの障害によってクラッシュしたり停止したりすることがあります。

ダウンタイムを防止し、スムーズな運用を確保するために、システム管理者はサービスを自動的に再起動するように構成することができます。これは特に、常に利用可能である必要があるウェブサーバー(ApacheNginx)、データベース(MySQLPostgreSQL)などの重要なアプリケーションにとって便利です。

このガイドでは、Linuxサービスが停止した場合に自動的に再起動するようにsystemdを使用する方法を説明します。

なぜサービスを自動的に再起動するのか?

Linuxでサービスを自動的に再起動する理由はいくつかあります:

  • ダウンタイムの最小化:サービスが予期せず停止した場合、自動再起動によりユーザーが最小限の障害を経験します。
  • 信頼性の向上:ウェブサーバーやデータベース、バックグラウンドプロセスなどのサービスは常に稼働している必要があります。
  • 手作業の削減:自動化がないと、サービスを頻繁に確認し、障害が発生した場合に手動で再起動する必要があります。
  • 予期しない失敗に対処する: ソフトウェアのバグ、リソース制限、またはシステムエラーによってサービスがクラッシュした場合、systemdは管理者の介入なしにそれを再起動できます。

次に、systemdを使用して自動再起動を設定する手順を見ていきましょう。

ステップ1: 再起動したいサービスを特定する

変更を加える前に、すべての実行中のサービスをリストすることで、設定したいサービスの正確な名前を知る必要があります。

systemctl list-units --type=service --state=running
List Running Linux Services

サービス名がすでにわかっている場合は、そのステータスを確認できます。

systemctl status apache2
Check Running Service Status

apache2を管理したい実際のサービス名に置き換えてください。

ステップ2: サービス設定を編集する

Systemdは、カスタム設定ファイルを使用してサービスの動作を変更することを許可します。システム全体の設定を変更する代わりに(更新中に上書きされる可能性があります)、systemctl editを使用してオーバーライドファイルを作成します。

次のコマンドを実行します:

systemctl edit apache2

これにより、デフォルトのテキストエディタで空のファイルが開きます。

ファイルが空でない場合、修正可能な既存の設定が表示されます。そうでない場合は、必要な再起動設定を追加する必要があります。

Open Systemd Service Configuration File

ステップ3: Systemd再起動設定を追加する

エディタに以下の行を追加します。

[Service]
Restart=always
RestartSec=5s

これらの設定の説明:

  • Restart=always – サービスが停止した場合に、理由に関係なく常に再起動します。
  • RestartSec=5s – systemdに対して、サービスの再起動前に5秒待機するよう指示し、繰り返しの障害がある場合に再起動ループを防ぎます。

追加したら、ファイルを保存して閉じます。

Add Service Restart Configuration

systemdサービスに変更を加えた後は、新しい設定が適用されるようにsystemdをリロードし、サービスを再起動する必要があります。

sudo systemctl daemon-reload
sudo systemctl restart apache2

サービスが自動的に再起動するように設定されていることを確認するには、次を実行します:

sudo systemctl show apache2 | grep Restart

すべてが正しく設定されている場合、次のように表示されます:

Restart=always

ステップ4:Linuxで自動再起動をテストする

構成が機能することを確認するために、サービスを手動で停止して再起動するかどうかを確認できます。

sudo systemctl stop apache2

5秒待機してから、その状態を確認します。

sudo systemctl status apache2

サービスが再び実行されている場合、自動再起動が機能しています!

追加の再起動オプション

必要に応じて、systemdでは異なる再起動ポリシーを提供します:

  • Restart=always – 手動で停止された場合でも、サービスは常に再起動されます。
  • Restart=on-failure – サービスがエラーで終了した場合にのみ再起動します(手動で停止された場合は再起動しません)。
  • Restart=on-abnormal – サービスがシグナルによるクラッシュ(セグメンテーションフォルトなど)の場合に再起動します。
  • Restart=on-watchdog – 実行中にタイムアウトした場合にサービスを再起動します。

あなたの要件に基づいて、Restart=alwaysを以下のオプションのいずれかに置き換えることができます。

問題のあるサービスのログを確認する方法

サービスが継続的に失敗する場合、journalctlコマンドを使用してログを確認することが良いアイデアです。このコマンドは、過去10分間のサービスのログを表示します。

journalctl -u apache2 --since "10 minutes ago"

リアルタイムのログストリームを表示するには、次のコマンドを使用します:

journalctl -u apache2 -f
結論

失敗したサービスの自動再起動を設定することで、重要なアプリケーションを手動で介入せずに継続的に実行することができます。systemdの再起動オプションを使用することで、ダウンタイムを最小限に抑え、システムの安定性を向上させ、手動トラブルシューティングの必要性を減らすことができます。

Source:
https://www.tecmint.com/automatically-restart-service-linux/