すべてのLinuxシステムでウォッチドッグを有効にできますか?

すべてのLinuxシステムでウォッチドッグを有効にできますか?

オレンジパイゼロRaspbianサーバーを実行するときに単にrootとしてコマンドを実行すると、監視機能を簡単に使用できますecho 1 > /dev/watchdog。このコマンドをしばらく実行するとシステムが確実に再起動されるため、システムの電源を入れたままにするには、このコマンドを定期的に繰り返す必要があると思います。ルートIDを使用して監視デバイスを実装し、cron起動時に次のスクリプトを実行させることができます。

#!/bin/bash
while [ true ]; do
    echo 1 > /dev/watchdog
    sleep 5
done

このスクリプトはOrange Pi Zeroで正常に実行されますが、Ubuntu 18.04を実行しているデスクトップコンピュータでは次のコマンドが実行されます。echo 1 > /dev/watchdogまったく動作しません。Linuxを実行しているすべてのデバイスでウォッチドッグを有効にできますか?

答え1

監視装置には、ハードウェアとソフトウェアの2種類があります。 Orange Piでは、SOCチップはハードウェア監視機能を提供します。初期化されている場合は頻繁にpingを実行する必要があり、そうでない場合はボードのリセットが行われます。

しかし、ハードウェア監視機能を備えたデスクトップはあまりないので、カーネルでソフトウェアバージョンを提供します。カーネルは追跡を試み、強制的に再起動を試みます。カーネル自体が破損しても何もリセットをトリガしないため、これはハードウェア監視より劣ります。しかし、動作します。

ソフトウェアウォッチドッグはsoftdogモジュールをロードして初期化できます。

% modprobe softdog
% dmesg | tail -1
[  120.573945] softdog: Software Watchdog Timer: 0.08 initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0)

デフォルトでは、60秒のタイムアウトがあることがわかります。

私がそうすれば

% echo > /dev/watchdog
% dmesg | tail -1
[  154.514976] watchdog: watchdog0: watchdog did not stop!

ウォッチドッグがタイムアウトしないことがわかります。

その後、マシンを1分間アイドル状態にしてコンソールで確認しました。

[  214.624112] softdog: Initiating system reboot

オペレーティングシステムが再起動されます。

答え2

systemdを使用する最新のLinuxオペレーティングシステムでは、ハードウェア監視を直接実行したり、別のユーザースペースデーモンを使用する代わりに、ユーザーの代わりにハードウェア監視と対話するようにsystemdを構成できます。

RuntimeWatchdogSecsystemd設定ファイルに(正の)値を設定するだけです/etc/systemd/system.conf

答え3

これはハードウェアによって異なります。最新のLinuxカーネルとIntel CPUを使用してUbuntuまたは他のDebianバリアントを実行している場合は、次のことができます。

  1. sudo apt install watchdog

  2. sudo nano -w /etc/default/watchdog たとえば、正しいモジュールを定義しますwatchdog_module="iTCO_wdt"(正しいドライバ名はハードウェアによって異なりますが、過去10年間に作成されたIntel CPUにはこれで十分です)。 Watchdogサービスが起動すると、/dev/watchdogデバイスがシステムに表示されるようにこのカーネルモジュールをロードします。

  3. sudo nano -w /etc/watchdog.conf この行のコメントを外すwatchdog-device = /dev/watchdogか、ファイルに追加の行として追加します。最終結果は以下と一致する必要があります。

     $ grep -vE '^(#|$)' /etc/watchdog.conf
     watchdog-device = /dev/watchdog
     realtime        = yes
     priority        = 1
    
  4. sudo systemctl enable --now watchdog

可能なすべての監視ドライバモジュールは、次のコマンドを使用して一覧表示できます。

ls "/lib/modules/$(uname -r)/kernel/drivers/watchdog"

どれを使うべきかわからない場合は、1つずつテストしてみてください。たとえば、ドライバをテストするには、sp5100_tco.ko実行しsudo modprobe sp5100_tcoてから実行してsudo wd_identifyドライバがハードウェアをサポートしていることを確認します。それでも機能しない場合は、ドライバをアンインストールしてsudo modprobe -r sp5100_tco別のドライバでもう一度やり直してください。ウォッチドッグプロセスはハードウェアに接続されているwd_identify場合は使用できません。ウォッチドッグが有効になっている場合は使用できません。

ウォッチドッグハードウェアをテストするには、何も書かずにデバイスの電源を入れるだけで人間のエラーが発生する可能性があります。たとえば、watchdog最後のステップでサービスを有効にする前にサービスを実行するだけで、sudo cat /dev/watchdog約60秒後にシステムが自動的にリセットされます。これは、監視ドライバがファイルが開いたときに監視タイマを起動して動作し、タイマをリセットする唯一の方法は、ドライバデバイスに何かを書き込むことです。ファイルを閉じると、再起動を引き起こすのではなくタイマーも停止します(カーネルがデフォルト以外のフラグでコンパイルされ、起動後に監視デバイスがまったく使用されていなくてもリセットが発生する可能性がある場合を除く)。ドライバファイルを実行すると、ファイルcatが開き、catプロセスがファイルの読み込みを停止し、タイマーが期限切れになると(デフォルトでは60秒)、ハードウェアのリセットが完了します。これを試す前に、すべてのタスクを保存してファイルシステムを同期することをお勧めします!

カーネル監視ドライバの詳細については、次を参照してください。公式カーネル文書

答え4

書き込み時にI / Oがリダイレクトされます1。監視デバイスの設定方法によっては、ファイルハンドルを閉じると監視が無効になることがあります。

努力する

exec 3>/dev/watchdog
echo 1 >&3

これにより、現在のシェルで監視デバイスが開いたままになり、タイマーは停止しません。

ほとんどの人はcronを使用する代わりに専用の監視デーモンを実行します。このデーモンはタイマーをリセットする前に一連のチェックを実行するため、テストに失敗するとシステムも再起動します。これはデータベースサービスが実際にクエリを処理していることを確認するために使用できますが、通常のサービス監視はプロセスが実行中ですが確認します。

関連情報