NUTがUPSバッテリーが不足していると報告すると、さまざまなシェルコマンドが実行されます。

NUTがUPSバッテリーが不足していると報告すると、さまざまなシェルコマンドが実行されます。

Debianサーバーにパッケージを正常にインストールすると、USB経由でEllipse PRO 1200 UPSのステータス(バッテリレベルを返す)nutを取得できます。upsc my-ups

注:停電が発生した場合、何が起こるのかテストしていません。

UPSはDebianサーバーに加えて他のデバイス(一部のルーター/スイッチ、NAS)に電力を供給します。

この場合、私が思うNUTの仕組みを考えると、NASにNUTをインストールし、それをNUTスレーブとして宣言する必要があります。その後、Debianサーバー(NUTマスター)は、バッテリーが不足するとNASにシャットダウンコマンドを発行し、それから自分で閉じます。

問題は、NASにNUTをインストールできませんが(OSはサポートされていません)、SSHで接続して終了するように指示できることです。

NUTがスレーブを終了するように命令するために、通常実行されるスクリプトと一緒に私のスクリプトをどのように/どこに配置できますか?

私が見つけることができる唯一の場所SHUTDOWNCMD/etc/nut/upsmon.conf文書:

SHUTDOWNCMD "/sbin/shutdown -h +0"

私の考えでは、このコマンドをSSH-shutdown-commandを実行してDebianサーバーをシャットダウンする手書きのスクリプトに置き換えることができるようです。

問題はSHUTDOWNCMD最後の作業のようです:バッテリーが非常に不足しているとき。私のスクリプトから他のすべてのデバイスに接続するには、バッテリーが放電されるまでに時間がかかります。

ありがとう

答え1

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 emailonbatt
  • UPSは5分間バッテリー電源で動作します/bin/your-script.sh upsonbatt
  • UPSは、ライン電源が復元されるとすぐに動作可能になります/bin/your-script.sh emailonline
  • タイマーがまだアクティブな場合は、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ステートメントの構文はforのマニュアルページにあり、upssched.conf(5)利用可能な通知イベントの種類はforのマニュアルページにありますupsmon(8)

答え2

あなたがしたいこと(事前に作られたフックを使用すること)が最もエレガントな方法です。

ただし、フックがない場合、またはフックがユーザーのニーズに適していないためにこれが不可能な場合は、ポーリング方法もオプションです。

/var/logファイルからNUTコンポーネントの出力を監視できます。

たとえば、私(Debian 7のSalicru UPS)は以下を記録します。

10月28日 13:37:49 ホスト名 upsmon[1766]: UPS salicru@caramon バッテリ電源

UPSがバッテリーに切り替わると、

10月28日 13:39:39 ホスト名 upsmon[1766]: UPS salicru@caramon オンライン電源

電力が回復したら。

停電をシミュレートし、ログメッセージを確認し、1分(または5分)ごとに実行されるcronジョブを作成し、ログ内の対応する行を見つけて目的のタスクを実行できます。

関連情報