UPSを導入したので停電したらマシンは自動でシャットダウンさせたい | ミンキームーンネットワーク

UPSを導入したので停電したらマシンは自動でシャットダウンさせたい

インターネット

関東地方の大停電が数年ぶりに発生しましたね、震災は忘れた頃にやってくる。今回はたまたま機器に影響はありませんでしたが停電への備えとしてUPSを導入することにしました。

購入したのはこちらの台湾メーカー CyberPower製 CPJ500です。500VA/300Wの出力が得られるので、我が家の構成では下記3システムをUPSの配下で給電させていますがフルで活動させた場合でも10分ほど停電を回避することができます。普段はWindowsマシンは起動していないので、NASとiMacだけであれば15分は持つ計算です。

NASSynology DS420jUPSバッテリー切り替え後2分でシャットダウン
Windows自作自作UPSバッテリー残80%でシャットダウン
MaciMacRetina 5K, 27-inch, 2017UPSバッテリー残20%でシャットダウン
我が家の構成

UPSとの接続図

ポンチ絵を描いてみました。

このような構成です。停電はいつ発生するかわからないので、UPSは24時間稼働しているマシンでコントロールするのが望ましいです。ちょうど我が家には自宅にNASがあるのでUPSとNASをUSBケーブルで直結しました。

SynologyのNAS

NAS自身はUSBケーブルで直結してちょっと設定すれば簡単にバッテリー動作時に自動シャットダウンするようになります。こちらはググれば山のように情報が出くるので適当にググってくださいw


私のブログでは、もっとややこしくて躓いたポイントを備忘録として残しておきます。

まず、SynologyのNASではNetwork UPS Tools (NUT)というサービスが内部で動作しているようなので、そのサービス(NUT Server)に各パソコンから接続させる(NUT Client)形にします。

Windows

こちらはフリーソフトのWinNUTで一発でした。

もしこのソフトを動かせないのだとしたら、Settings → Connectionタブの「UPS Name」が誤っている可能性があります。ups.typeで返ってくる名前なのかな? 我が家のSynologyでは ups という文字列に設定したところ正常に動作しました。

メイン画面に戻って、画面下部の1行枠がログ表示エリアです。Connection to Nut Host xxx.xxx.xxx.xxx Established と表示されれば接続完了です。メイン画面左の UPS On Line の四角が緑色になることでも確認できます。

なお、OSやアンチウイルスソフト、ファイヤウォールなどの設定を変更する必要はありませんでした。

Mac

Macは金で解決ですw UPS Power MonitorというシェアウェアをAppStoreから600円ちょっとで購入しました。

インストール後のセットアップ画面で、SynologyのNASのIPアドレスをUPS IP Address欄に入力します。
ユーザー名は「ups」、パスワードは空欄のままで大丈夫。
Device detailsウィンドウが表示されUPSの状態が表示されればまずは接続成功です。

Synology側でも接続するMacのIPアドレスを「許可された Synology NAS デバイス」欄に登録しておきましょう。

ただ、この状態ではUPSの情報が見られるだけで停電時の自動シャットダウンは行えません。

次に自動シャットダウンするためのツールとしてUPS Power Monitorをインストールする必要があるので、こちらの手順に従ったのですが「upspowerhelper.py」がデーモンとして動作せずかなり苦労しました。

Python3をMacにインストールしてOS再起動。でもインストールスクリプトがうまく動作しない。58879番ポートにcurlで接続しようとしても connection refused ですから多分デーモンとして動作していない。

試しにインストールスクリプトを手動で実行してみたけれども、やはりうまく動かない。さらに切り分けで以下のコマンドを直接Pythonから起動します。

python3 ~/.upspowerhelper/upspowerhelper.py

別ターミナルから curl http://127.0.0.1:58879/info で接続してみると、今度は正常に応答しました。となるとPythonのスクリプトに問題なし。となると、launchctlがうまく動いていないのかな? 手動で叩いてみるとやはり失敗。原因はここか!

$ launchctl load -w ~/Library/LaunchAgents/com.dniklewicz.UPSPowerHelper.plist
Load failed: 5: Input/output error
Try running `launchctl bootstrap` as root for richer errors.

plistファイルの中身はXMLファイルでしたので内容を読むとエラーログの出力先が記載されていました。エラーログ(~/Library/Logs/UPSPowerHelper-Error.log)には以下のエラーメッセージが連続して表示されていましたので原因として怪しそうです。

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

上記の文字列でググったところ、Macのデベロッパーツールが必要そうに見受けられました。確かに最初のインストール手順の説明サイトにもSTEP by STEP でダメな時に切り分ける手順の最後に記載されています。

xcode-select --install

上記のコマンドを実行したところ開発者ツールをインストールされるようのでそのまま進めます。

結果、こちらで無事成功しました! デベロッパーツールがインストールされていないことが原因だったのか・・・

このように Power Guide is active and will shut down following devices when needed と表示されれば成功です。

休日を半日費やしましたが、これで少なくとも停電に対する備えとしては完了です!CyberPower製 CPJ500はSynology製のNASとも相性が良いし、14,000円ほどで安心と停電時に機械が壊れない安全性を買えるので安かったと思います。

コメント