APCUPSDの設定方法



●apcupsdのインストール(RPM)

 apcupsd とはAPC社製の無停電装置を監視し、ブラウザから状態を表示してくれる便利なツールです。ツールはCGIを使用しています。
# yum -y install apcupsd apcupsd-cgi apcupsd-gui

# systemctl enable apcupsd
# cp /var/www/apcupsd/*cgi /var/www/cgi-bin/
# systemctl start httpd(またはrestart)

※CentOS 8の場合
# dnf install libusb mailx -y
# rpm -ivh http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/a/apcupsd-3.14.14-18.el8.x86_64.rpm \
 http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/a/apcupsd-cgi-3.14.14-18.el8.x86_64.rpm \
 http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/a/apcupsd-gui-3.14.14-18.el8.x86_64.rpm
http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/a/apcupsd-3.14.14-18.el8.x86_64.rpm を取得中
http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/a/apcupsd-cgi-3.14.14-18.el8.x86_64.rpm を取得中
http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/a/apcupsd-gui-3.14.14-18.el8.x86_64.rpm を取得中
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:apcupsd-3.14.14-18.el8           ################################# [ 33%]
   2:apcupsd-cgi-3.14.14-18.el8       ################################# [ 67%]
   3:apcupsd-gui-3.14.14-18.el8       ################################# [100%]
# systemctl enable --now apcupsd
# firewall-cmd --add-service=apcupsd --permanent
# firewall-cmd --reload


●apcupsdのインストール(ソース)

 CentOS5.xではRPMからインストールしてもCGIパッケージがインストールされないのでソースからインストールすることにします。
 また、CGIをインストールするにはgd、gd-develが必要ですのであらかじめインストールしておいてください。
# cd /usr/local/src
# wget http://sourceforge.net/projects/ \
        apcupsd/files/apcupsd%20-%20Stable/3.14.8/apcupsd-3.14.8.tar.gz/download
# tar zxvf apcupsd-3.14.8.tar.gz
# cd apcupsd-3.14.8
# ./configure -enable-cgi -with-cgi-bin=/var/www/apcupsd -enable-usb
 以下のように表示されれば問題ありません。
Configuration complete: Run 'make' to build apcuspd.
# make  以下のように表示されれば問題ありません。
        src
        src/lib
  CXX   src/lib/apcconfig.c
  CXX   src/lib/apcerror.c
  CXX   src/lib/apcevents.c
  CXX   src/lib/apcexec.c
  CXX   src/lib/apcfile.c
  CXX   src/lib/apclibnis.c
  CXX   src/lib/apclock.c
  CXX   src/lib/apclog.c
  CXX   src/lib/apcsignal.c
  CXX   src/lib/apcstatus.c
  CXX   src/lib/asys.c
  CXX   src/lib/newups.c
  CXX   src/lib/md5.c
  CXX   src/lib/statmgr.cpp
  CXX   src/lib/gethostname.c
  CXX   src/lib/amutex.cpp
  CXX   src/lib/astring.cpp
  CXX   src/lib/autil.cpp
  CXX   src/lib/atimer.cpp
  CXX   src/lib/athread.cpp
  AR    src/lib/libapc.a
        src/drivers
        src/drivers/apcsmart
  CXX   src/drivers/apcsmart/smart.c
  CXX   src/drivers/apcsmart/smarteeprom.c
  CXX   src/drivers/apcsmart/smartoper.c
  CXX   src/drivers/apcsmart/smartsetup.c
  CXX   src/drivers/apcsmart/smartsetup2.c
        src/drivers/dumb
  CXX   src/drivers/dumb/dumboper.c
  CXX   src/drivers/dumb/dumbsetup.c
        src/drivers/net
  CXX   src/drivers/net/net.c
        src/drivers/pcnet
  CXX   src/drivers/pcnet/pcnet.c
        src/drivers/usb
        src/drivers/usb/linux
  CXX   src/drivers/usb/linux/linux-usb.c
  CXX   src/drivers/usb/usb.c
        src/drivers/snmplite
  CXX   src/drivers/snmplite/asn.cpp
  CXX   src/drivers/snmplite/mib.cpp
  CXX   src/drivers/snmplite/snmp.cpp
  CXX   src/drivers/snmplite/snmplite.cpp
  CXX   src/drivers/drivers.c
  AR    src/drivers/libdrivers.a
        src/cgi
  CXX   src/cgi/upsfetch.c
  CXX   src/cgi/cgilib.c
  CXX   src/cgi/multimon.c
  LD    src/cgi/multimon.cgi
  CXX   src/cgi/upsstats.c
  LD    src/cgi/upsstats.cgi
  CXX   src/cgi/upsfstats.c
  LD    src/cgi/upsfstats.cgi
  CXX   src/cgi/upsimage.c
  LD    src/cgi/upsimage.cgi
  CXX   src/options.c
  CXX   src/device.c
  CXX   src/reports.c
  CXX   src/action.c
  CXX   src/apcupsd.c
  CXX   src/apcnis.c
  LD    src/apcupsd
  CXX   src/apcaccess.c
  LD    src/apcaccess
  CXX   src/apctest.c
  LD    src/apctest
  CXX   src/smtp.c
  LD    src/smtp
        platforms
        platforms/etc
        platforms/redhat
        doc
 インストールします。
# make install
 以下のように表示されればインストール完了です。
        src
        src/lib
        src/drivers
        src/drivers/apcsmart
        src/drivers/dumb
        src/drivers/net
        src/drivers/pcnet
        src/drivers/usb
        src/drivers/usb/linux
        src/drivers/snmplite
        src/cgi
  COPY  multimon.cgi => /var/www/apcupsd
  COPY  upsstats.cgi => /var/www/apcupsd
  COPY  upsfstats.cgi => /var/www/apcupsd
  COPY  upsimage.cgi => /var/www/apcupsd
  COPY  apcupsd.css => /etc/apcupsd/apcupsd.css.new
  COPY  hosts.conf => /etc/apcupsd/hosts.conf.new
  COPY  multimon.conf => /etc/apcupsd/multimon.conf.new
  COPY  apcupsd => /sbin/apcupsd
  COPY  apctest => /sbin/apctest
  COPY  apcaccess => /sbin/apcaccess
  COPY  smtp => /sbin/smtp
        platforms
        platforms/etc
  COPY  apcupsd.conf => /etc/apcupsd/apcupsd.conf
  COPY  changeme => /etc/apcupsd/changeme
  COPY  commfailure => /etc/apcupsd/commfailure
  COPY  commok => /etc/apcupsd/commok
  COPY  offbattery => /etc/apcupsd/offbattery
  COPY  onbattery => /etc/apcupsd/onbattery
        platforms/redhat
  ------------------------------------------------------------
  RedHat distribution installation
  ------------------------------------------------------------
  COPY  apcupsd => /etc/rc.d/init.d
  CP    /etc/rc.d/init.d/halt => //etc/rc.d/init.d/halt.old
  AWK   /etc/rc.d/init.d/halt
=================================================
apcupsd script installation for RedHat  complete.
You should now edit  /etc/apcupsd/apcupsd.conf  to correspond
to your setup then start the apcupsd daemon with:
/etc/rc.d/init.d/apcupsd start
thereafter when you reboot, it will be stopped and started
automatically.
Please check that your halt script in:
    /etc/rc.d/init.d/halt
was properly updated (see installation section of manual)
=================================================
  COPY  apccontrol => /etc/apcupsd/apccontrol
  COPY  80-apcupsd-ups-policy.fdi => /usr/share/hal/fdi/policy/20thirdparty
        doc
  COPY  apcupsd.8 => /usr/share/man/man8/apcupsd.8
  COPY  apcaccess.8 => /usr/share/man/man8/apcaccess.8
  COPY  apctest.8 => /usr/share/man/man8/apctest.8
  COPY  apccontrol.8 => /usr/share/man/man8/apccontrol.8
  COPY  apcupsd.conf.5 => /usr/share/man/man5/apcupsd.conf.5

●設定

 /etc/apcupsd/apcupsd.confを編集します。
# vi /etc/apcupsd/apcupsd.conf
設定 項目 説明
物理設定 UPSCABLE 接続に用いるケーブルの種類
UPSTYPE UPSの種類
DEVICE UPSを繋いだポート。USBの場合、自動認識するので設定する必要はない
シャットダウン設定 シャットダウンの開始はBATTERYLEVELとMINUTES、TIMEOUTの3つの値の内どれか一つが該当したときに実行される
BATTERYLEVEL バッテリ残量が指定したパーセンテージを下回った場合にシャットダウンする
TIMEOUT バッテリに動作が切り替わってからシャットダウンする秒数 0ならシャットダウンしない
MINUTES バッテリ稼働可能と思われる予想残り時間が指定の時間(分)を切った場合にシャットダウンする
UPS管理設定 POLLTIME UPSへの問合せ間隔(秒)
ONBATTERYDELAY 瞬間停電から実際の電源障害であるとonbatteryイベントで検知するまでの時間を指定
ANNOY ANNOYはシステムを停止する前にユーザに対してログオフを促す通知を行う時間を秒で指定。0を設定すると無効になる
ANNOYDELAY 停電時にユーザへの通知を開始するまでの時間(遅延時間)を秒で指定
NOLOGON 停電中にユーザのログインを拒否するためのnologinファイルを作成する条件を設定
NETSERVER cgiを利用したUPSステータスプログラムを利用するか、しないか
NISPORT NETSERVERで利用するポート番号
EVENTFILE イベントログの保管場所(起動・電源断・バッテリー交換など)
UPSNAME ステータス表示に使うUPS名前
ネットUPS設定 UPSCLASS sharemaster,shareslave,standalone などを設定
UPSMODE 共有、net、等のモード
NETACCESS ネットワークアクセスをさせるか
NETTIME マスタ・スレーブ間でのデータ転送間隔(sec)
NETPORT ネットワークで利用するTCPポート番号
MASTER マスターIPを設定(スレーブのみ設定)
SLAVE スレーブIPを設定 複数可(マスターのみ設定)
USERMAGIC スレーブ識別子。同一UPS内で重複不可


●master側のapcupsd.conf
UPSCABLE usb
UPSTYPE usb
DEVICE
LOCKFILE /var/lock
BATTERYLEVEL 10 ← 自己環境に合わせる
MINUTES 5 ← 自己環境に合わせる
TIMEOUT 300 ← 自己環境に合わせる
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS	standalone ← デフォルトのまま
UPSMODE	disable ← デフォルトのまま
STATTIME 0
STATFILE /var/log/apcupsd/apcupsd.status
LOGSTATS off
DATATIME 0
#FACILITY	local1
 設定が完了したらapcupsdを再起動します。
# systemctl restart apcupsd
または
# systemctl restart apcupsd


●slave側のapcupsd.conf
UPSCABLE	ether ← 変更
UPSTYPE	net ← 変更
DEVICE	192.168.0.5:3551 ← masterサーバのIP:ポート
LOCKFILE /var/lock
BATTERYLEVEL 15 ← 自己環境に合わせる
MINUTES 5 ← 自己環境に合わせる
TIMEOUT 300 ← 自己環境に合わせる
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS       standalone ← デフォルトのまま
UPSMODE	disable ← デフォルトのまま
STATTIME 0
STATFILE /var/log/apcupsd/apcupsd.status
LOGSTATS off
DATATIME 0
#FACILITY	local1
 設定が完了したらapcupsdを再起動します。
# systemctl restart apcupsd
または
# systemctl restart apcupsd


●Windowsのslave側のapcupsd.conf

 参考URL:Apcupsd を使用して LAN 上の複数のサーバを自動シャットダウンする

 winapcupsd-3.14.14.exeをApcupsd UPS control softwareよりダウンロードします。
 ダウンロードしたファイルをダブルクリックしインストールを開始します。
UPSCABLE	ether
UPSTYPE	net
DEVICE	192.168.0.5:3551 ← masterサーバのIP:ポート
LOCKFILE /var/lock
BATTERYLEVEL 12 ← 自己環境に合わせる
MINUTES 5 ← 自己環境に合わせる
TIMEOUT 300 ← 自己環境に合わせる
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE c:\Program Files/apcupsd/etc/apcupsd/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS       standalone ← デフォルトのまま
UPSMODE	disable ← デフォルトのまま
STATTIME 0
STATFILE c:\Program Files/apcupsd/etc/apcupsd/apcupsd.events
LOGSTATS off
DATATIME 0
#FACILITY	local1
 設定が完了したら、「Apcupsd UPS Monitor」サービスをを再起動します。
 必要に応じて、Windowsファイアーウォールの設定を変更し通信ができるようにします。

●APCUPSDの動作テスト

apctestコマンド・apcaccessコマンド

 動作テストをしてみよう。テストには次の2つの方法があります。

  * apctestコマンドを使う方法
  * apcaccessコマンドを使う方法

 apctestコマンドは、どちらかというと正しく動作しない場合にその原因を調べるためのもので、ケーブルを抜いて試したりするための原因究明が主目的となっています。
 apcaccessコマンドは、apcupsdに現在のUPSの状態を問い合わせ、現在の状態を調べるためのものです。
 apctestを実行してみます。この場合、事前にapcupsdを停止しておく必要がありますので注意してください。
# systemctl start apcupsd
# apctest
 USBケーブルがうまくつながってなかったり何か問題があると、下記のように表示されます。
Tue Aug 04 14:03:52 JST 2009  apcupsd FATAL ERROR in linux-usb.c at line 609
Cannot find UPS device --
For a link to detailed USB trouble shooting information,
please see <http://www.apcupsd.com/support.html>.
Tue Aug 04 14:03:52 JST 2009  apcupsd error shutdown completed
Tue Aug 04 14:16:55 JST 2009  apcupsd FATAL ERROR in linux-usb.c at line 609
Cannot find UPS device --
For a link to detailed USB trouble shooting information,
please see <http://www.apcupsd.com/support.html>.
Tue Aug 04 14:16:55 JST 2009  apcupsd error shutdown completed
 問題が無いと、下記のように表示されます。
2009-08-04 14:05:10 apctest 3.14.6 (16 May 2009) redhat
Checking configuration ...
Attached to driver: usb
sharenet.type = DISABLE
cable.type = USB_CABLE
You are using a USB cable type, so I'm entering USB test mode
mode.type = USB_UPS
Setting up the port ...
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing USB UPSes.
Getting UPS capabilities...SUCCESS
Please select the function you want to perform.
1)  Test kill UPS power
2)  Perform self-test
3)  Read last self-test result
4)  Change battery date
5)  View battery date
6)  View manufacturing date
7)  Set alarm behavior
8)  Set sensitivity
9)  Set low transfer voltage
10) Set high transfer voltage
11) Quit
Select function number:
 問題が無ければ、apcupsdを起動します。
# systemctl start apcupsd
 ログを確認します。
# cat /var/log/apcupsd.events

停電模擬試験

 実際には停電を起こすことは出来ませんので、UPSのコンセントを抜き、警告メッセージが出力されればOKです。
※ この情報は即座に root へもメールされます。
		
Broadcast message from root (Thu Aug  6 23:31:48 2009):
Power failure on UPS BK350JP. Running on batteries.

復電模擬試験

 サーバーがシャットダウンされる前にUPSのコンセントを戻します。電力が回復した旨のメッセージが出力されればOKです。
Broadcast message from root (Thu Aug  6 23:31:53 2009):
Power has returned on UPS BK350JP...

●CGIの動作確認

 apcupsd-cgiをインストールしたマシンでの作業となります。
 ただし、既にWebサーバの設定及びPerlのインストール等は完了しているものとします。
systemctl start apcupsd
systemctl status apcupsd
systemctl start httpd
 ブラウザでhttp://localhost/apcupsd/multimon.cgiにアクセスします。
 以下のような画面が表示されます。
 ただし、ソースからインストールした場合は上記にアクセスしても表示されませんので、準備をします。
# vi /etc/httpd/conf.d/apcupsd.conf 
(下記はapache 2.2の設定例)
ScriptAlias /apcupsd/ "/var/www/apcupsd/"
<Directory "/var/www/apcupsd">
    DirectoryIndex upsstats.cgi
    AllowOverride None
    Options ExecCGI Indexes
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    # Allow from .example.com
</Directory>
(下記はapache 2.4の設定例)
<Directory "/var/www/apcupsd">
    DirectoryIndex upsstats.cgi
    AllowOverride None
    Options ExecCGI Indexes
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
  </IfModule>
</Directory>
# systemctl restart httpd
 これで少なくとも127.0.0.1からアクセスすることができるようになります。

apcupsd01.png

 上記、画面内の「localhost」をクリックすると、以下のような画面が表示されます。

apcupsd02.png

 ブラウザでのアクセスはデフォルトのアクセス制御によりlocalhostからしか参照できません。必要に応じて、アクセス制御を追記してください。
# vi /etc/httpd/conf.d/apcupsd.conf
(下記はapache 2.2の設定例)
<Directory "/var/www/apcupsd">
    DirectoryIndex upsstats.cgi
    AllowOverride None
    Options ExecCGI Indexes
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 192.168.0 ← 192.168.0.0/24を許可
    Allow from 10.0.0 ← 10.0.0.0/24を許可
    Allow from ::1
    # Allow from .example.com
</Directory>
(下記はapache 2.4の設定例)
<Directory "/var/www/apcupsd">
    DirectoryIndex upsstats.cgi
    AllowOverride None
    Options ExecCGI Indexes
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
    Require ip 192.168.0. ← 192.168.0.0/24を許可
    Require ip 10.0.0. ← 10.0.0.0/24を許可
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
  </IfModule>
</Directory>

●同じUPSから電源供給されている他PCとの連携

項目 初期値 Master
(Linux)
Slave1
(Windows Server 2000)
Slave2
(Windows 2003 Server)
UPSCABLE usb usb ether ether
UPSTYPE usb usb usb usb
DEVICE 必要なし 必要なし 必要なし 必要なし
BATTERYLEVEL 5 5 12 12
MINUTES 3 3 5 5
TIMEOUT 0 300 300 300
NETSERVER on on on on
NISPORT 3551 3551 3551 3551
EVENTFILE 初期値 初期値 初期値 初期値
UPSNAME - 適宜指定 適宜指定 適宜指定
UPSCLASS standalone standalone standalone standalone
UPSMODE disable disable disable disable
NETACCESS true true true true
NETTIME #NETTIME 100 NETTIME 100 NETTIME 100 NETTIME 100
NETPORT #NETPORT 6666 NETPORT 6666 NETPORT 6666 NETPORT 6666
MASTER #MASTER #MASTER MASTER 192.168.0.5 MASTER 192.168.0.5
SLAVE #SLAVE SLAVE 1.0.0.4
SLAVE 1.0.0.101
#SLAVE #SLAVE
USERMAGIC #USERMAGIC #USERMAGIC Slave1 Slave2
#はコメントアウトされていることを示します。

●APCUPSD UPS Network Monitorで複数監視

 apcupsd-cgiをインストールしたマシンでの作業となります。
 hosts.confを編集します
# vi /etc/apcupsd/hosts.conf
MONITOR 127.0.0.1 "Local Host"
MONITOR 192.168.0.1 "PC1"
MONITOR 192.168.0.2 "PC2"
 保存後、apcupsdを再起動します。
systemctl restart apcupsd
 監視画面で「Not available: upsfetch: tcp_open failed for ***.***.***.*** port 3551」と表示される場合はiptables等でポートが塞がれていないかどうか確認してください。

●携帯電話へ通知(.pcocmailrcを使用)

 apcupsdを設定すると、停電・復電時にroot宛にメールが届きます。
 root宛に届いたメールを/etc/aliasesを使用して特定ユーザに自動転送するように設定します。
 特定ユーザ宛に届いたUPSに関するメールを携帯電話のメールアドレスに転送するように設定します。
 しかし、/etc/aliasesで指定すると、すべてのroot宛のメールが特定ユーザに転送されてしまいます。
 転送されたメールから停電・復電時に関連するメールのみを更に、携帯電話に転送するように設定しました(procmailがインストールされていることが必要です)。
 まず、rootになり、ローカル上のあるユーザに転送するようにします。保存したら、newaliasesを忘れずに実行します。
# vi /etc/aliases
# newaliases
 続いて、転送先ユーザになり、ホームディレクトリで.procmailrcを編集(/etc/procmailrcを使用している場合はrootで編集)します。
$ vi .procmailrc
MAILDIR=$HOME/Maildir
LOGFILE=$Maildir/procmail.log
LOCKFILE=$MAILDIR/.lockfile
UPS=$HOME/.UPS
:0 c ← カーボンコピー(複写)を残す
* ^Subject: *\/.* ← 件名をチェック
* ? echo "$MATCH" | fgrep -if $UPS ← UPSというファイルに書いてある語句がマッチしているか
! *******@docomo.ne.jp ← 実際に転送させる、携帯電話のメールアドレス
 次に、件名でマッチする語句を、別ファイル(.UPS)に保存しておきます。
$ vi .UPS
Power Failure ← 停電した(電圧低下開始)
Power has returned ← 復活した(通電開始した)
の、2行です。
 停電テストを実施し、その結果が無事転送され、転送先ユーザで受信できていれば設定完了です。
 その他にも細かく設定できます。詳しくは/usr/share/doc/apcupsd-3.8.5/にドキュメントがあります。

●停電時のメール通知

 停電発生時にメールで通知させます。

・sendmailコマンドによる方法
# 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="admin@ezweb.co.jp"
APCUPSD="apcupsd@example.com"
APCUPSD_MAIL="/usr/sbin/sendmail -oi -f $APCUPSD -t $SYSADMIN"
 ↑ -oi:標準入力からのメッセージの読み取り時に、ピリオド単体を終了記号とはみなさないようにする。
HOSTNAME=`hostname`
MSG="$HOSTNAME Power Failure !!!"
#
(
   echo "Subject: $MSG"
   echo " "
   echo `date +"%Y/%m/%d %p %I:%M:%S"`
#   echo `date +"%Y/%m/%d %H:%M:%S"` ← %pを使用したくない場合の例
   echo " "
   /sbin/apcaccess status | grep UPSNAME
   /sbin/apcaccess status | grep BCHARGE
   /sbin/apcaccess status | grep TIMELEFT
) | /usr/bin/nkf | $APCUPSD_MAIL ← 日付(%p)表示の午前・午後の文字化け対策
exit 0

・mailコマンドによる方法
# 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="admin@ezweb.co.jp"
APCUPSD="apcupsd@bigbang.dyndns.org"
APCUPSD_MAIL="/bin/mail"
HOSTNAME=`hostname`
MSG="$HOSTNAME Power Failure !!!"
#
(
#   echo "Subject: $MSG"
#   echo " "
   echo `date +"%Y/%m/%d %p %I:%M:%S"`
   echo " "
   /sbin/apcaccess status | grep UPSNAME
   /sbin/apcaccess status | grep BCHARGE
   /sbin/apcaccess status | grep TIMELEFT
) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN -r $APCUPSD
exit 0

●復電時のメール通知

 復電時にメールで通知するようにする。

・sendmailコマンドによる方法
# vi /etc/apcupsd/offbattery
#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the
# UPS goes back on to the mains after a power failure.
# We send an email message to root to notify him.
#
SYSADMIN="admin@ezweb.co.jp"
APCUPSD="apcupsd@example.com"
APCUPSD_MAIL="/usr/sbin/sendmail -oi -f $APCUPSD -t $SYSADMIN"
 ↑ -oi:標準入力からのメッセージの読み取り時に、ピリオド単体を終了記号とはみなさないようにする。
HOSTNAME=`hostname`
MSG="$HOSTNAME Power has returned"
#
(
   echo "Subject: $MSG"
   echo " "
   echo `date +"%Y/%m/%d %p %I:%M:%S"`
#   echo `date +"%Y/%m/%d %H:%M:%S"` ← %pを使用したくない場合の例
   echo " "
   /sbin/apcaccess status | grep UPSNAME
   /sbin/apcaccess status | grep BCHARGE
   /sbin/apcaccess status | grep TIMELEFT
) | /usr/bin/nkf | $APCUPSD_MAIL ← 日付(%p)表示の午前・午後の文字化け対策
exit 0

・mailコマンドによる方法
# vi /etc/apcupsd/offbattery
#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the
# UPS goes back on to the mains after a power failure.
# We send an email message to root to notify him.
#
SYSADMIN="admin@ezweb.co.jp"
APCUPSD="apcupsd@example.com"
APCUPSD_MAIL="/bin/mail"
HOSTNAME=`hostname`
MSG="$HOSTNAME Power has returned"
#
(
#   echo "Subject: $MSG"
#   echo " "
   echo `date +"%Y/%m/%d %p %I:%M:%S"`
#   echo `date +"%Y/%m/%d %H:%M:%S"` ← %pを使用したくない場合の例
   echo " "
   /sbin/apcaccess status | grep UPSNAME
   /sbin/apcaccess status | grep BCHARGE
   /sbin/apcaccess status | grep TIMELEFT
) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN -r $APCUPSD
exit 0
 停電によるシャットダウン後に復電すると、自動でサーバが起動するように、BIOSの電源設定でAllways ONとしておく。