無停電電源装置(UPS)Ubuntu 16.04 商用電源復帰後の自動再起動

無停電電源装置(UPS)

経緯

無停電電源装置(UPS)は購入してほっらかしにしていた。
今年、夏に停電が起こった。
SSDがセクターエラーになり使えなくなった。
Wordpressが開かなくなった。
復旧に3日を要した。
もうこりごり、やはり停電対策は必修のようだ。

WordPress Server for ubuntu 16.04にAPCのUPSを導入

私が購入していたものは APC RS 550電源バックアップ(500VA) BR550G-JP

設定の解説

apcupsd(名前はAPC UPS Daemonの略)は、Linux上で動作するデーモンであり、コンピュータがAmerican Power Conversion Corp(APC) 無停電電源装置(UPS)と対話できるようにします 。停電時にapcupsdは、ユーザに商用電源の損失を通知し、商用電源が復旧しない場合は、バッテリが使い果たされたか指定されたタイムアウト時間が経過したか指定されたバッテリ充電率に達したか、または残りのバッテリ稼働時間に達したか(内部UPS計算に基づいて電力消費率によって決定) 。これらのシャットダウン条件のいずれかが満たされた場合にシャットダウンを実行します。

設定値 初期値 解説
BATTERYLEVEL 5 バッテリ残量が5%以下になればシャットダウン
MINUTES 3 バッテリ残量が3分以内になればシャットダウン
TIMEOUT 0 停電後何秒でシャットダウンを開始するか
KILLDELAY 0  UPSを切る命令、秒数、0は切らない

KILLDELAYはubuntu 16.04では設定してもUPSを切ることはできなかった

安全で有効な設定

バッテリー残容量に基づいた設定は正確姓に欠けるので採用しない
停電が始まった後何秒でシャットダウンを開始するかを設定したほうが安全である
日本では瞬電がほとんどであるので60秒後にシャットダウンを開始することにした
停電が復旧すれば自動でサーバーが動き始める設定にしておけばこの設定が正解

ソフトをインストールする

# apt-get install apcupsd
# vi /etc/apcupsd/apcupsd.conf
# /etc/apcupsd/apcupsd.conf
...

#   Or a specific cable model number may be used:
#     940-0119A, 940-0127A, 940-0128A, 940-0020B,
#     940-0020C, 940-0023A, 940-0024B, 940-0024C,
#     940-1524C, 940-0024G, 940-0095A, 940-0095B,
#     940-0095C, 940-0625A, M-04-02-2000
#
# 変更
# UPSCABLE smart
  UPSCABLE usb
...
# modbus    /dev/tty**       Serial device for use with newest SmartUPS models
#                            supporting the MODBUS protocol.
#
# 変更
# UPSTYPE apcsmart
  USPTYPE usb
...
# 変更
# DEVICE /dev/ttyS0
  DEVICE
...
#    or the remaining battery runtime drops to or below MINUTES.  Of course,
#    if you are testing, setting this to 60 causes a quick system shutdown
#    if you pull the power plug.   
#  If you have an older dumb UPS, you will want to set this to less than
#    the time you know you can run on batteries.
# 変更
# TIMEOUT 0
  TIMEOUT 60
...
スポンサーリンク

変更点の解説

サーバーとUPSは付属のUSBケーブルで信号のやり取りを行うのでUSBCABELとUSPTYPEはusbに変更する。
DEVICEはシリアルケーブルで信号のやり取りを行わないのでブランクにする。
TIMEOUT 60は停電開始から60秒後にサーバーのシャットダウンを実行する。
TIMEOUT 0 は停電が起こってもシャットダウンを行わない
瞬電が多いのでこの設定が正解

# vi /etc/default/apcupsd
# /etc/default/apcupsd
# Defaults for apcupsd initscript

# Apcupsd-devel internal configuration
APCACCESS=/sbin/apcaccess
# 変更
# ISCONFIGURED=no
ISCONFIGURED=yes

変更点の解説

apcupsd.confを変更したことを知らせるためにISCONFIGURED=yesにする。

apcupsdの再起動

# service apcupsd restart

apcupsdの状態確認

# /sbin/apcaccess status

UPSの動作確認

UPSの電源コンセントを抜いて60秒後にサーバーがシャットダウンを実施されればOK

スポンサーリンク

商用電源が復帰した場合にサーバーを自動で起動したい

普通は自動起動しない

apcupsdのインストールと設定だけでは自動シャットダウンを行ってくれるだけである
電源が復旧した場合にサーバーのスイッチを入れる必要がある

うまく動かない

BIOSの設定を変更してサーバーのスイッチを入れなくてもコンセントをつなげればサーバーが起動できるようしたがダメ

サーバーのスイッチを入れなくてもサーバーを起動できるようにする

わたしのマザーボードはASUSでアドバンス→詳細→APMで設定した→電源復帰後ONを有効にした

APCに問い合わせてみた

UPSの電源が切れないとダメであると返事してくれた
2度目の問い合わせではBACK-UPSはlinuxに対応していないのでダメでsmart-upsであればlinuxに対応していると返事してくれた。

UPSの電源が切れないのが問題

# apctest

これでUPSの切るテストが行えて、切ることができた

スポンサーリンク

UPSの電源を切れるようにするにはどうすればよいか

シャットダウンが終わる前に切る命令をUPSに送る必要がある
シャットダウン処理の最後に切る命令を送れば良いようである

シャットダウン処理の最後に任意の処理を実行させる

/lib/systemd/system-shutdown/ 内に任意のスクリプトを作ればOKのようだ

UPSを切るを実現させる

# vi /lib/systemd/system-shutdown/apcupsd.service
#!/bin/sh
if [ "$1" = "poweroff" -a -f /etc/apcupsd/powerfail ]; then
    /etc/apcupsd/apccontrol killpower
fi
# chmod +x /lib/systemd/system-shutdown/apcupsd.service

商用電源が復帰した時にサーバーが自動起動するかの確認

UPSのACコンセントを抜く
60秒後にシャットダウンが自動で実施される
その後、60秒程度でUPSの液晶が切れればOK
切れない場合はサーバーの自動再起動はできない

Apache経由のapcupsd-cgi

install

# apt-get install apcupsd-cgi

アクセス

http://サーバーip/cgi-bin/apcupsd/multimon.cgi

停電時にメールを送信する

設定

# vi /etc/apcupsd/onbattery
#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the UPS
# goes on batteries.
# We send an email message to root to notify him.
#
SYSADMIN="自分のgmailアドレス"
...

これで表題が ubuntu UPS ubuntu Power Failure !!! のメールが送られてくればOK

関連広告記事
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク