web-dev-qa-db-ja.com

NUTが低UPSバッテリーを報告したときにさまざまなシェルコマンドを実行する

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が前回のアクション、つまりバッテリーが非常に少ない場合を対象としているようです。自分のスクリプトで他のすべてのデバイスに接続すると、バッテリーがなくなるまでに時間がかかる可能性があります。

ありがとう

4
CDuv

イベントが発生した後、タイマーで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は次のことを行います。

  • UPSのバッテリーがオンになった直後に、/bin/your-script.sh emailwarnを実行します。
  • UPSがバッテリーになってから5分後に、/bin/your-script.sh upsonbattを実行します。
  • UPSがライン電源を回復した直後に、/bin/your-script.sh upsonlineを実行します。
  • UPSが回線電源を回復した直後に、まだアクティブな場合は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ページにあります。 。

3
zhongfu

あなたがしようとしていること(事前に確立されたフックを使用)は、最もエレガントなアプローチです。

しかし、フックがないか、フックがニーズに合わないためにそれが不可能な場合は、ポーリングアプローチもオプションです。

/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ジョブを作成できます。

1