中オレンジパイゼロ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を構成できます。
RuntimeWatchdogSec
systemd設定ファイルに(正の)値を設定するだけです/etc/systemd/system.conf
。
答え3
これはハードウェアによって異なります。最新のLinuxカーネルとIntel CPUを使用してUbuntuまたは他のDebianバリアントを実行している場合は、次のことができます。
sudo apt install watchdog
sudo nano -w /etc/default/watchdog
たとえば、正しいモジュールを定義しますwatchdog_module="iTCO_wdt"
(正しいドライバ名はハードウェアによって異なりますが、過去10年間に作成されたIntel CPUにはこれで十分です)。 Watchdogサービスが起動すると、/dev/watchdog
デバイスがシステムに表示されるようにこのカーネルモジュールをロードします。sudo nano -w /etc/watchdog.conf
この行のコメントを外すwatchdog-device = /dev/watchdog
か、ファイルに追加の行として追加します。最終結果は以下と一致する必要があります。$ grep -vE '^(#|$)' /etc/watchdog.conf watchdog-device = /dev/watchdog realtime = yes priority = 1
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を使用する代わりに専用の監視デーモンを実行します。このデーモンはタイマーをリセットする前に一連のチェックを実行するため、テストに失敗するとシステムも再起動します。これはデータベースサービスが実際にクエリを処理していることを確認するために使用できますが、通常のサービス監視はプロセスが実行中ですが確認します。