Debianサーバーにnut
パッケージを正常にインストールしたので、Ellipse PRO 1200 UPSのステータスをUSB経由で取得できます(upsc my-ups
はバッテリーレベルを返します)。
注:停電が発生したときに何が起こるかはまだテストしていません。
このUPSは、このDebianサーバー以外のデバイス(一部のルーター/スイッチとNAS)に電力を供給します。
この場合、NUTがどのように機能すると思うかを考慮して、NASにNUTをインストールし、それをNUTスレーブとして宣言する必要があります。これにより、Debianサーバー(NUTマスター)はNASにシャットダウンを指示します。バッテリー残量が少なくなり、その後シャットダウンします。
問題は、NASにNUTをインストールできない(OSはサポートされていない)ことですが、SSHしてシャットダウンするように指示することができます。
スレーブにシャットダウンを指示するためにNUTが通常実行するものと一緒に、独自のスクリプトをどのように/どこに配置できますか?
私が見つけた唯一の場所は/ etc/nut/upsmon.confファイルのSHUTDOWNCMD
です:
SHUTDOWNCMD "/sbin/shutdown -h +0"
このコマンドを、SSH-shutdown-commandを実行し、Debianサーバーもシャットダウンすることで終了する手作りのスクリプトに置き換えることができると思います。
問題は、SHUTDOWNCMD
が前回のアクション、つまりバッテリーが非常に少ない場合を対象としているようです。自分のスクリプトで他のすべてのデバイスに接続すると、バッテリーがなくなるまでに時間がかかる可能性があります。
ありがとう
イベントが発生した後、タイマーでupssched.conf(5)
を使用して独自のスクリプトを実行してみることができます。
基本的なupssched.conf
は次のようになります。
CMDSCRIPT /bin/your-script.sh
AT ONBATT * EXECUTE emailonbatt
AT ONBATT * START-TIMER upsonbatt 300
AT ONLINE * EXECUTE emailonline
AT ONLINE * CANCEL-TIMER upsonbatt upsonline
これにより、NUTは次のことを行います。
/bin/your-script.sh emailwarn
を実行します。/bin/your-script.sh upsonbatt
を実行します。/bin/your-script.sh upsonline
を実行します。upsonbatt
タイマーもキャンセルします。それ以外の場合は、/bin/your-script.sh upsonline
を実行します。スクリプトは次のようになります。
#!/bin/bash
case $1 in
emailonbatt)
mail -s "UPS on battery power" [email protected]
;;
emailonline)
mail -s "UPS on line power" [email protected]
;;
upsonbatt)
ssh root@nas shutdown -h +0
;;
upsonline)
etherwake 01:23:45:AB:CD:EF
;;
esac
ATステートメントの構文は、upssched.conf(5)
のmanページにあります。利用可能な通知イベントタイプは、upsmon(8)
のmanページにあります。 。
あなたがしようとしていること(事前に確立されたフックを使用)は、最もエレガントなアプローチです。
しかし、フックがないか、フックがニーズに合わないためにそれが不可能な場合は、ポーリングアプローチもオプションです。
/var/log
ファイルでNUTコンポーネントの出力を監視できます。
鉱山(Debian 7のサリクルUPS)、例えばこれを記録します:
10月28日13:37:49ホスト名upsmon [1766]:バッテリー上のUPS salicru @ caramon
uPSがバッテリーに切り替わるとき、そしてこれ
10月28日13:39:39ホスト名upsmon [1766]:UPS salicru @ caramon on line power
電源が戻ったとき。
電源障害をシミュレートし、ログメッセージを確認してから、1分ごと(または5分)に実行され、ログでそれらの行を探して必要なアクションを実行するcronジョブを作成できます。