突然の電源断はOSにとって最もシステム自体にダメージを与える現象です。
最悪の場合システムが起動しなくなるばかりでなく、大事なファイルが壊れてしまう可能性があります。

無停電電源装置を利用すれば搭載されているバッテリによって通電ができ、停電時でもしばらくの間コンピュータを動かしておけます。
しかし、バッテリにも限界があり数時間の停電の場合、バッテリが切れたら上記と同様のことが起きます。

そこで、一般的にはUPSと利用するコンピュータとをシリアルケーブルなどで接続し、コンピュータ側でUPSの電源状態を知る機能が必要です。
そうすれば、コンピュータ側で、shutdownコマンドを発行し、正常に終了することが可能になります。

ここでは、一番利用されているAPC社のUPSを監視するApcupsdについて説明します。

インストール

インストールは、rpmパッケージで行います。
入手先は
http://www.apcupsd.com/index.html
から入手できます。
rpm -i apcupsd-3.8.5-1.i386.RH7.1.rpm
インストール後は,以下に示すファイル群がコピーされる。
/etc/apcupsd デレクトリ APCUPSDの各種設定ファイル
/sbin/apcaccess apcupsdからUPSの状態を取得し,そのステータスを表示するプログラム
/sbin/apcnisd ネットワーク経由でほかのコンピュータにUPSの状態を伝えるデーモン
/etc/rc.d/init.d/apcupsd APCUPSDを起動したり停止したりするためのスクリプト
/sbin/apctest APCUPSDの動作を確認するためのバイナリプログラム
/sbin/apcupsd APCUPSDの本体。デーモンとして起動させる
/usr/share/doc/apcupsd-3.8.5 APCUPSDのドキュメント類

APCUPSDの設定

設定ファイルは以下の位置に作成されます。
/etc/apcupsd/apcupsd.conf
このファイルをviなどで編集することにより環境を変更することができます。

■主なディレクティブ■
UPSCABLE APCの製品に添付された利用するケーブルを指定します。
(例:940-0024C)
UPSTYPE UPSの型番を指定します。(例:smartups)
DEVICE シリアルポートのデバイス名(例:/dev/ttyS0)
LOCKFILE ロックファイルのパス名(例:/var/lock)
BATTERYLEVEL シャットダウンタイミングのバッテリ残率(%)
MINUTES バッテリ残率に達してシャットダウンを起動するまでの時間(分)
/usr/share/doc/apcupsd-3.8.5 APCUPSDのドキュメント類

自動起動

次のコマンドで正常に起動しているか確認します。

/etc/rc.d/init.d/apcupsd start

APCUPSDの動作テスト

/sbin/apctest 正しく動作しない場合、その原因を調べるためのコマンド、ケーブルを抜いて試したりするための原因究明が主目的となっている。
/sbin/apcaccess apcupsdに現在のUPSの状態を問い合わせ、現在の状態を調べるコマンドです。

正常に動作したら自動起動にします。

chkconfig --level 35 apcupsd on

ネットワーク化

複数のコンピュータでUPS1台を共有する場合、
シリアルケーブルで繋いだコンピュータしか電源断を検出できません。
しかしapcupsdはネットワークを通じて情報をリレーする機能も備えています。
この場合、シリアルケーブルと直接繋いだコンピュータがマスターとして動作し、
それ以外のコンピュータはスレーブとして動作します。
スレーブ動作するコンピュータは複数存在できます。


環境ファイルを/etc/apcupsd/apcupsd.confを以下のように設定する。

マスタ/スレーブ共通
UPSMODE net ネットワーク機能を有効
NETACCESS true ネットワークアクセスを有効
NETTIME 60 マスタとスレーブ間でデータを転送する間隔(秒)
NETPORT 6666 TCPポート6666を利用する。

マスタ側の設定
UPSCLASS netmaster マスタの場合
SLAVE 192.168.1.12 スレーブのIPアドレスを指定します。
スレーブが複数ある場合、複数行指定します。
NETTIME 60 マスタとスレーブ間でデータを転送する間隔(秒)
NETPORT 6666 TCPポート6666を利用する。

スレーブ側の設定
UPSCLASS netslave スレーブの場合
UPSCABLE ether スレーブ側ではシリアルケーブルではなくTCP経由でデータを取得することになるので,UPSケーブルの種類を示すUPSCABLEの値をetherと記述変更する。
MASTER 192.168.1.1 MASTER項目にマスタとなるホストのIPアドレスを指定する。
USERMAGIC MyClient 適当な17文字以内の識別子を付ける。この識別子は,スレーブを区別する名前になる。

動作確認には、/sbin/apcaccess status
コマンドで確認します。


Webで状態管理を行う

apcupsdにはWeb用管理ツールも用意されています。
これを利用すれば、遠隔地からブラウザを通してUPSの状態が監視できます。
cgiプログラム群は、/etc/apcupsd/cgi/ に格納されています。
このディレクトリをapacheのエリアスで定義して、httpで参照できるようにするか
もしくは、apacheのドキュメントディレクトリ配下にコピーするかして利用できます。

cp /etc/apcupsd/cgi/* /usr/local/apache/cgi-bin/

上記例ではブラウザより以下のように起動します。

http://サーバアドレス/cgi-bin/multimon.cgi