以前、旧フォーラムにて修正方法をドキュメント化したことがありましたが、今はもうそのフォーラムはありません。
最近UPSをUnifi UPS 2Uに変更し、このモデルはNUT Serverをサポートしており、UPSName・ユーザー名・パスワードの設定が可能です。
claude desktop(クラウドデスクトップ)を使って再び動作させることができました。これがあなたの助けになれば幸いです。
QNAPをNUT(Network UPS Tools)クライアントとして修正 — GUI「Network UPS slave」は正常に動作しない
セットアップ
- 別デバイスで稼働しているNUTサーバー(今回はUniFi UPSがNUTサーバーとして動作)、
<NUT_SERVER_IP>:3493で接続可能。
- QNAP NAS(QTS 5.2.9)がクライアント/スレーブとしてそのUPSの監視を必要としており、電源イベントに応答できるようにする。
問題点
QNAPのGUI機能 — コントロールパネル → システム → 電源 → UPS →「Network UPS slave」 — はサーバーのIPアドレスしか入力を求めません。ユーザー名やパスワードの項目はありません。
本来のNUTのMONITOR接続(認証されたクライアントとして登録し、適切なシャットダウン連携を行うための接続)には、サーバー側のupsd.usersで設定された認証情報が必要です。しかしこれがGUIにより設定されないため、QNAPのGUIによるプロセス(upsutil)では完全な認証ができません。その結果:
- NASがNUTサーバーの接続クライアント一覧に表示されない。
- GUI上のUPS情報フィールドが空白(AC電源状態、バッテリー容量、モデル — すべて
--のまま)、UPSは稼働していても情報が表示されない。
手動で読み取り専用クエリを実行すると正常動作:
upsc <ups_name>@<NUT_SERVER_IP>
これで実際のバッテリー残量、負荷、ステータスなど、ライブデータは取得可能 — サーバーに到達できUPS名も正しい。しかしこれは認証不要の「読み取り」のみで、監視クライアント接続ではない。つまり、監視用デーモンが動作しているかはわからない。
重要な発見:ps | grep -i upsで確認するとupsutilしか動作していない — NAS上で本来必要なupsmon(NUTの監視デーモン)がまったく起動していない。GUIの「Network UPS slave」オプションはこれを起動しない。
修正方法
1. 本来のupsmon設定ファイルを直接編集
QNAPは標準のNUT upsmon.confを搭載していますが、GUIからはMONITOR行に認証情報が設定されません。直接編集(SSHやSFTPで)します:
/etc/config/ups/upsmon.conf
サーバー側のNUT認証情報に従ってMONITOR行を追加/修正してください:
MONITOR <ups_name>@<NUT_SERVER_IP>:3493 1 <monitor_username> <monitor_password> slave
ヒント:正しい<ups_name>はNUTサーバー内部のデバイス名で、「ups」とは限りません。
upsc -l <NUT_SERVER_IP>
2. 監視デーモンを起動
QNAPのupsmonバイナリは標準NUTとは違い-c <path>を受け付けません(このフラグはfsd/reload/stopなど別用途)。設定ファイルは上記/etc/config/ups/upsmon.confから自動的に読み込むため内容を修正したら、次を実行:
/usr/sbin/upsmon
デーモンが動作中か確認(親プロセスと子プロセスの両方が表示されるはず):
ps | grep -i upsmon
起動するとNASは即座にNUTサーバーのクライアントリストに正しく表示され、認証も完了。
3. 永続化(crontabによる監視)
QNAPのGUIは手動でプロセスが起動したことを認識できないため再起動やGUI操作によるプロセス終了が発生する。QNAPのautorun.shはコントロールパネル → ハードウェア → 一般で有効化が必要かつMalware Removerアプリのスキャンで無効化されることもあるので、crontabによる監視がより信頼できます:
*/5 * * * * pgrep -x upsmon >/dev/null || /usr/sbin/upsmon
5分ごとにupsmonが動作しているかチェックし、動作していなければ自動再起動 — 再起動やクラッシュ、GUIによる停止にも対応。
QNAPで重要: /etc/config/crontabを(例えばSFTPでNotepad++などから)直接編集しても、crond.sh restartだけでは反映されません。実際のcrontabへファイルを読み込み直す必要があります:
crontab /etc/config/crontab && /etc/init.d/crond.sh restart
反映確認:
crontab -l
(Windowsから編集する場合は改行コードをUnix/LFにしておくと、cronが行を無視する問題の回避になります。)
結果
upsmonが継続稼働し、認証も完了。NUTサーバーのクライアントリストにも表示される。
upsc <ups_name>@<NUT_SERVER_IP>によるUPSライブデータの確認が可能。
- cronの監視により再起動やGUI解除でも自動で再起動され、QNAPの脆弱なautorun.shに依存しない。
根本原因まとめ
QNAPの「Network UPS slave」GUI機能は簡易的で認証を行わないラッパー(upsutil)であり、標準NUTupsmonデーモンとは異なり、認証付きクライアント監視を行えません。QNAPのUPSステータスページが空白表示でNASがNUTサーバーのクライアントリストに現れない場合は、upsmonが実際に稼働しているか(ps | grep upsmon)の確認を — 多くの場合、GUIの表示に関わらず起動していません。