Difference between revisions of "Linux/Services/Ups"

From Iveze
Jump to: navigation, search
Line 49: Line 49:
  
 
Note that you can not pass a password to ssh from within a script.  
 
Note that you can not pass a password to ssh from within a script.  
 +
 +
=== Windows ===
  
 
=== Selinux ===
 
=== Selinux ===

Revision as of 16:32, 11 June 2015

Shutdown the servers before the Uninterruptible Power Supply is completely drained.

Use case

A Ups is great to avoid hard shutdowns of servers with short power cuts. But what if the power is interrupted for a longer time than the battery can provide the servers? For such cases there is software that shuts down the servers at a certain percentage of battery drainage.

Apcupsd

Apcupsd is software specifically for Apc Ups-es. The hardware link between the Ups and a server is (often) a Usb cable. Apc Ups-es come with an odd cable, with on one end a Usb connector and on the other end something that looks like a Utp connector. One server can be connected with the Ups. Other servers must be shutdown from that connected server.

Install

Apcupsd is in the non standard Epel repository.

yum install apcupsd

Connect the usb cable to the Ups and start the service and make it auto start at boot.

Run apcaccess to check if the Ups is found. It will display several parameters of the Ups.

Configure

The configuration files are in the directory
/etc/apcupsd
The most interesting variable in apcupsd.conf is
BATTERYLEVEL 50
Here it is set to initiate shutdown at 50% battery level. Be sure there is enough battery for the time the server needs to shutdown.

Basically apcupsd will now shutdown this server when there is a power cut. If there are other servers that must be shutdown too, you can make use of the internal NIS server that communicates Ups events to other servers where apcupsd is installed too. More information about that is in the manual of apcupsd.

Override default behaviour

With default behaviour there are 2 issues

  1. The NIS solution needs apcupsd installed on every machine and it needs open ports in the firewalls.
  2. Apart from shutting down this machine, apcupsd also shuts down the Ups (killpower). This may lead to a situation where the Ups is shutdown before this machine is ready shutting down.

We prefer to shutdown the other servers from this server via ssh. Therefore we must override default behaviour of the script apccontrol. Do not edit this script, because it will be overwritten with an update. The case options in the script can be overridden by adding an executable script with the same name to /etc/apcupsd. We add two override scripts.

doshutdown

#!/bin/sh
# redirect all output to file exec >>/var/log/apcupsd.events 2>&1
echo "$(/bin/date) Shutdown start"
# use ip's because the DNS server may go down at some time /usr/bin/ssh root@192.168.1.1 'shutdown -h +1' & # servername1
/usr/bin/ssh root@192.168.1.2 'shutdown -h +1' & # servername2
echo "$(/bin/date) Shutdown stop"
# prevent default action (this machine is not shutdown automatically) exit 99

doreboot

#!/bin/sh
# redirect all output to file exec >>/var/log/apcupsd.events 2>&1
# We do not know if reboots are desirable, so we do nothing but prevent them
echo "$(/bin/date) Reboot start"
echo "Reboot not done" echo "$(/bin/date) Reboot stop"
# prevent default action (this machine is not rebooted automatically) exit 99

These two override scripts also prevent the killpower issue. The Ups just stays on until the battery is empty. If this is not the case, then an override script for killpower may be necessary.

Note that you can not pass a password to ssh from within a script.

Windows

Selinux

Alternatives

Nut is a generic software, suitable for more Ups brands than Apc.