Synology NASとLinux(Debian Buster)を1台のUPSに連動させる その1の続きとなります。
SynologyのDS1618+はUPSのネットワーク共有でNUTというアプリを裏で動かしています。
NUTはNetwork UPS Toolsのことで、Linuxで利用可能なパッケージとなっています。
DS1618+にSSHで接続して設定を確認してみました。
/usr/syno/etc/ups/upsmon.confの中身を覗くと
MONITOR ups@localhost 1 monuser secret masterという記述がありました。
ユーザー名:monuser
パスワード:secret
で接続すればいけそうです。
早速、連携したいDebianにNUTパッケージをインストールします。
# apt install nut
※この記事を書いている時点でのバージョンは2.7.4-8となります。
NUTの細かい内容まで説明は難しいので、詳しく知りたい方はNUTのオフィシャルドキュメントを読んでみてください。
細かいところまで読むと結構勉強になりす。
ということで、設定内容だけ抜粋です。
/etc/nut/upsmon.conf
このファイルが基本的な設定ファイルとなります。
※NASのIPを192.168.1.100と仮定して書いていますので、ご自身の環境に置き換えてください。
このファイルでNASを見に行くという設定を行います。
DS1618+にSSHでログインして確認したIDとPASSを使用します。
SynologyのNAS同士のUPS連携は可能になっていますので、DS1618+だけでなく別の機種でも同じ設定になっていると思われます。
MONITOR ups@192.168.1.100 1 monuser secret slave
MINSUPPLIES 1
SHUTDOWNCMD “/sbin/shutdown -h +0”
NOTIFYCMD /sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
MONITOR行はNASではmasterになっていましたが、Debianでは見に行く側なのでslaveとなります。
NOTIFYFLAGの行はUPSのステータス変更時に何を行うかを設定する行となります。
他にも色々なステータスがありますが、今回はこの3つのみを設定します。
ONLINE:正常運転時のステータスです
ONBATT:バッテリー運転時のステータスです
LOWBATT:バッテリーが残り僅かになった時のステータスです
後ろのSYSLOG+WALL+EXECの意味は以下となっています。
SYSLOG:syslogにログとして書き込みます
WALL:全ユーザーのターミナルにメッセージを書き込みます
EXEC:後述するNOTIFYCMDが実行されます
NOTIFYCMDに関する設定ファイルは以下となります。
/etc/nut/upssched.conf
CMDSCRIPT /bin/upssched-cmd
PIPEFN /var/run/nut/upssched.pipe
LOCKFN /var/run/nut/upssched.lock
AT ONBATT * START-TIMER upsgone 120
AT ONLINE * CANCEL-TIMER upsgone
AT LOWBATT * START-TIMER upsgone 5
実際に実行するスクリプトをCMDSCRIPTで指定しています。
AT行はステータスを受け取った際にスクリプトに対する動きを設定しています。
AT_ステータス_ホストの設定_スクリプトに対する実行タイプの指定_スクリプトに渡す引数_タイマーの場合は秒数
となります。
AT ONBATT * START-TIMER upsgone 120を例にとると
バッテリーのステータスになったら、全てのホストの設定で、タイマーを開始、スクリプトにupsgoneを渡し、タイマーの時間は120秒
となります。
START-TIMERの部分は
CANCEL-TIMERがタイマーをキャンセル
EXECUTEだとスクリプトを実行となります。
今回の設定ではLOWBATTの場合でもタイマー5秒としていますが、即時実行したければEXECUTEでもいいかと思います。
最後に実際に実行されるスクリプトを編集します。
/bin/upssched-cmd
case $1 in upsgone) logger -t upssched-cmd "The UPS has been gone for awhile" upsmon -c fsd ;; lowbatt) logger -t upssched-cmd "The UPS became lowbattery" upsmon -c fsd ;; *) logger -t upssched-cmd "Unrecognized command: $1" ;; esac
ONBATT、LOWBATT共にやっていることは同じで
upsmon -c fsd
というコマンドでシャットダウンを行っています。
その上の行はログ出力なので文字が違うだけで、その下のコマンドは同じになっています。
設定が終わったら最終的に
# systemctl restart nut-client
を実行してサービスを再起動します。
あとは実際にUPSの電源を抜いてみて時間通りに動くかをテストします。
ハブの電源もUPSに接続していないと、実際の停電時にNASと通信ができないので注意が必要です。
またDebianのシャットダウン迄の時間は、NASよりも短くしておかないと、今回のNAS側の設定では先にUPSの電源が切れてしまいます。
(NAS側で最終的にUPSの電源OFFを行っています)
実際に停電と同じ状態にして上手く動けば完了です!
使用しているUPSがUbuntuに公式には対応していないので
いろいろさまよって、
ここへ来てやっとnutのやってることがわかり始めました。
ありがとうございます。
それで、/etc/nut/upssched.confについて
> AT LOWBATT * START-TIMER upsgone 5
と書かれているのは、そのあとのスクリプトの編集内容からすると、
もしかして
> AT LOWBATT * START-TIMER lowbatt 5
とされるおつもりだったのではないでしょうか。
間違っていましたらすみません。
みんななやんでおおきくなった さん
そうですね。
lggerへの出力内容しか違いこそありませんが、正確にはlowbatt 5でいいかと思います。
わかりました。ありがとうございます。