概要
- UPSが1万5000円ぐらいなのでこのblogが動いているLinuxサーバに導入してみました。
- UPSとは、「Uninterruptible Power Supply」の略で、日本語では「無停電電源装置」と訳します。
- APC RS 550 BR550S-JP Eを買いました。あまり商品リサーチはしてません。APCは老舗なのでまぁ、安心かなと。
物理的なセットアップ
まず最初に、UPSの蓋を開けてバッテリーのケーブルを接続します。初期状態ではケーブルが外れた状態になっています。バイクのバッテリーみたいな電池が入ってました。
そして、こんな感じに適当にケーブルを接続してセットアップ。
残り時間は27分と出ています。
サーバであんまり電力消費しないはずなのに想定より短い感じです。今回は常時70Wぐらい使われています。mac miniでは5wしか消費されていなかたのに全然違う。。。
付属のUSBケーブルでUPSと接続しておきます。
ソフトウェア設定
apcupsdというデーモンで管理します。これによって、UPSの電池が切れそうになったらLinuxが自動的にシャットダウンされます。
aptで入るのでインストールします。
matsu@dell ~> sudo apt install apcupsd Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: apcupsd-doc Suggested packages: apcupsd-cgi The following NEW packages will be installed: apcupsd apcupsd-doc 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 532 kB of archives. After this operation, 1,743 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://ftp.riken.jp/Linux/ubuntu focal/universe amd64 apcupsd-doc all 3.14.14-3build1 [328 kB] Get:2 http://ftp.riken.jp/Linux/ubuntu focal/universe amd64 apcupsd amd64 3.14.14-3build1 [204 kB] Fetched 532 kB in 3s (212 kB/s) Selecting previously unselected package apcupsd-doc. (Reading database ... 256476 files and directories currently installed.) Preparing to unpack .../apcupsd-doc_3.14.14-3build1_all.deb ... Unpacking apcupsd-doc (3.14.14-3build1) ... Selecting previously unselected package apcupsd. Preparing to unpack .../apcupsd_3.14.14-3build1_amd64.deb ... Unpacking apcupsd (3.14.14-3build1) ... Setting up apcupsd (3.14.14-3build1) ... Created symlink /etc/systemd/system/multi-user.target.wants/apcupsd.service → /lib/systemd/system/apcupsd.service. Setting up apcupsd-doc (3.14.14-3build1) ... Processing triggers for man-db (2.9.1-1) ... Processing triggers for systemd (245.4-4ubuntu3.6) ... perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en_US:en", LC_ALL = (unset), LC_CTYPE = "UTF-8", LC_COLLATE = "C", LC_TERMINAL = "iTerm2", LANG = "C" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en_US:en", LC_ALL = (unset), LC_CTYPE = "UTF-8", LC_COLLATE = "C", LC_TERMINAL = "iTerm2", LANG = "C" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). 23 files changed, 816 insertions(+) create mode 100755 apcupsd/apccontrol create mode 100644 apcupsd/apcupsd.conf create mode 100755 apcupsd/changeme create mode 100755 apcupsd/commfailure create mode 100755 apcupsd/commok create mode 100644 apcupsd/hosts.conf create mode 100755 apcupsd/killpower create mode 100644 apcupsd/multimon.conf create mode 100755 apcupsd/offbattery create mode 100755 apcupsd/onbattery create mode 100755 apcupsd/ups-monitor create mode 100644 default/apcupsd create mode 100755 init.d/apcupsd create mode 120000 init.d/ups-monitor create mode 120000 rc0.d/K01apcupsd create mode 120000 rc1.d/K01apcupsd create mode 120000 rc2.d/S01apcupsd create mode 120000 rc3.d/S01apcupsd create mode 120000 rc4.d/S01apcupsd create mode 120000 rc5.d/S01apcupsd create mode 120000 rc6.d/K01apcupsd create mode 120000 systemd/system/multi-user.target.wants/apcupsd.service
インストール直後は勝手にデーモンが立ち上がって稼働しだします。初期設定を1つもしていないのに。。。
私の環境の場合、1つだけ追加で設定するだけで最低限の動作はします。DEVICEの行をコメントアウトするだけでした。
# DEVICE /dev/ttyS0
その後は、デーモンの再起動をします。sudo systemctl restart apcupsd
単独でAPCのUPSを使う場合はこれだけでよしなに動いてくれます。
設定されているパラメータを確認
apctestコマンドでステータスを表示できるかと思いきや、デーモンが立ち上がっている場合はこのコマンドは使えないよです。
matsu@dell ~> sudo apctest [sudo] password for matsu: 2021-04-13 18:08:20 apctest 3.14.14 (31 May 2016) debian Checking configuration ... sharenet.type = Network & ShareUPS Disabled cable.type = USB Cable mode.type = USB UPS Driver apctest FATAL ERROR in apctest.c at line 311 Unable to create UPS lock file. If apcupsd or apctest is already running, please stop it and run this program again. apctest error termination completed
代わりに、apcaccessというコマンドを利用します。これを使えばデーモン経由で情報を取得してくるみたいです。
> sudo apcaccess
APC : 001,036,0850
DATE : 2024-06-30 15:47:11 +0000
HOSTNAME : gmk
VERSION : 3.14.14 (31 May 2016) debian
UPSNAME : gmk
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2024-06-30 15:42:16 +0000
MODEL : APC RS 550S
STATUS : ONLINE
LINEV : 105.0 Volts
LOADPCT : 13.0 Percent
BCHARGE : 96.0 Percent
TIMELEFT : 39.3 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
SENSE : Medium
LOTRANS : 82.0 Volts
HITRANS : 123.0 Volts
ALARMDEL : No alarm
BATTV : 13.5 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : 4B2033P28395
BATTDATE : 2020-08-16
NOMINV : 100 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 330 Watts
FIRMWARE : 941.c6 .A USB FW:c6
END APC : 2024-06-30 15:47:24 +0000
設定ファイルの確認
設定ファイルのパラメータを覗いてみます。ファイルは /etc/apcupsd/apcupsd.conf にあります。
UPSCABLE usb
UPSとの通信を何で行っているかです。USBなのでそのままでOK。
BATTERYLEVEL 5
電池の残りが5%になったらshutdown -hを実行するということ。
MINUTES 3
電池の残りが3分以下になったらshutdown -hを実行するということ。上記とor条件かなと思います。
ANNOY 300
シャットダウンの300秒前から、broadcastメッセージを出してユーザにログアウトを促す。
停電のテスト
商用電源を抜き差ししてみます。
流石にシャットダウンされては困るので短時間抜き差ししてみます。
抜いてみたときのログ。/var/log/syslog
Apr 13 17:06:20 dell apcupsd[18732]: Power failure. Apr 13 17:06:26 dell apcupsd[18732]: Running on UPS batteries.
同時にメールがrootに飛びます。
商用電源を復帰させたときのログ
Apr 13 17:06:55 dell apcupsd[18732]: Mains returned. No longer on UPS batteries. Apr 13 17:06:55 dell apcupsd[18732]: Power is back. UPS running on mains.
Mackerelから各種指標を監視する
gistにコードを書いておきました。
Comments