AI

Watchdogが意外と使えた話し

リモートワークが当たり前の世の中になり、リモートで職場のPCに入って作業することが多くなりました。でも、Linux PCに入ってPython Programを書いてAI開発していると、結構いろいろなハプニングに見舞われます。データセットをメモリーに広げすぎてメモリー不足で落ちてしまったり、トレーニング中に画像データをチェックしすぎてハングアップしてしまったり…

そんなとき

会社にいる人を探してポチッと電源ボタンを押してもらったり、都合をつけて出社したり、そんなことを繰り返しているうちに、スイッチボットを導入してみようかとか、USB Watchdogを購入しようかとか考えていた時のこと。

素直にLinuxのWatchdogを試してみようと思いやってみたところ、いい感じにリブートしてくれるようになったので、その報告。

Watchdogの設定

こちらの記事を参考に設定してみました。

まずハードウェアタイマーが利用できるか確認です。lsmod で iTCO_wdt が見つかればOKです。

次に見るのは、/etc/default/watchdog です。こんな感じになっていればOKです。

$ cat /etc/default/watchdog
# Start watchdog at boot time? 0 or 1
run_watchdog=1
# Start wd_keepalive after stopping watchdog? 0 or 1
run_wd_keepalive=1
# Load module before starting watchdog
watchdog_module="iTCO_wdt"
# Specify additional watchdog options here (see manpage).
watchdog_options="-s -v -c /etc/watchdog.conf"

リブートの永久ループを避けたければ “run_watchdog=0” にしたほうがよいでしょう。逆にブート中もチェックしたければ “wd_keepalive=1” にします。

そしてOptionalな設定は /etc/watchdog.conf に書きます。が、あまり触らなくても大丈夫でしょう。ひとつあげるとすれば、 ping 設定は個人的にはおススメです。なんだかよくわからないけどとてつもなく重くなったときや、GUIのみフリーズしてしまったときなどに重宝します。

たったこれだけです。簡単でしょう !?

動作確認

Ping設定していることを前提にします。このとき、

マシンA : Watchdogを仕掛けたマシン
マシンB : Ping先のマシン

とします。手元にマシンA, Bがあるのであればイーサケーブルを抜くだけでマシンAのリブートが確認できるはずですね。

一方、ping設定をしていればリモートでも結構簡単に動作確認ができます。リモートからマシンBのIPアドレスを変えればよいのです。そしてマシンAのリブートが完了するまでにマシンBのIPアドレスを元に戻します。

ここで焦ってはいけないのが、マシンBのIPアドレスを変えたとたんにリモートアクセスが一旦切れることです。なので、変更後のIPアドレスでマシンBにリモートアクセスし直し、IPアドレスを元に戻す必要があります。(するとまたリモートアクセスが切れますので、元のIPアドレスで入りなおします)

面倒ではあるのですが、ここまで確認できれば結構リモートから解決できる幅が広がります。

さまざまな芸当

たとえばGUI系が重くなってしまったためにリモートから操作不能になったけど、カーネルは生きていてpingは打てているなんてときにも、マシンBのIPアドレスを変えることによって、マシンAの強制再起動ができたりするわけです。

あるいはこの場合だとマシンBがお亡くなりになってしまうことが最悪のケースのひとつですが、そんなときマシンAのリブートが完了してからpingエラーで次のリブートが始まってしまうまでの間(1分間の設定)を見計らってマシンAにリモートで入りwatchdogをいったん止めて、ping設定を外してwatchdogを再稼働させるなどの芸当もできるようになります。(この場合マシンBの復帰は実際にボタン操作しないとダメですが、ひとまずマシンAを使える状態までには復帰できるので、仕事的には延命になるわけです)

というわけで

Watchdogを有効活用してみましょう、というお話しでした。簡単かつ便利で、使わない理由がわかりません。マシンBとして安定した(あまり難しい仕事をしない)ものを選べば、堅牢なシステムを作れること間違いなしです。是非トライしてみて下さい !


コメントを残す

*

CAPTCHA