289
1.877.877.2269
BLACKBOX.COM
NEED HELP?
LEAVE THE TECH TO US
LIVE 24/7
TECHNICAL
SUPPORT
1.877.877.2269
CHAPTER 16: ADVANCED CONFIGURATION
16.1.6 POWER CYCLE ANY DEVICE UPON A PING REQUEST FAILURE
The ping-detect script is designed to run specified commands when a monitored host stops responding to ping requests.
The first parameter taken by the ping-detect script is the hostname or IP address of the device to ping. Any other parameters are
then regarded as a command to run whenever the ping to the host fails. ping-detect can run any number of commands.
Below is an example using ping-detect to power cycle an RPC (PDU) outlet whenever a specific host fails to respond to a ping
request. ping-detect is run from /etc/config/rc.local to make sure that the monitoring starts whenever the system boots.
We assume we have a serially controlled RPC connected to port01 on a console server and have a router powered by outlet 3 on
the RPC and the router has an internal IP address of 192.168.22.2. The following instructions will show you how to continuously
ping the router and, when the router fails, to respond to a series of pings, the console server will send a command to RPC outlet 3
to power cycle the router, and write the current date/time to a file.
Copy the ping-detect script to /etc/config/scripts/ on the console server.
Open /etc/config/rc.local using vi (or another text editor).
Add the following line to rc.local:
/etc/config/scripts/ping-detect 192.168.22.2 /bin/bash -c \
"pmpower -l port01 -o 3 cycle && date" > /tmp/output.log &
The above command will cause the ping-detect script to continuously ping the host at 192.168.22.2, which is the router. If the
router crashes it will no longer respond to ping requests. If this happens, the two commands pmpower and date will run. The output
from these commands is sent to the file /tmp/output.log so that we have some kind of record. The ping-detect is also run in the
background using the &.
The rc.local script is only run by default when the system boots. You can manually run the rc.local script or the ping-detect script if
desired.
The above is just one example of using the ping-detect script. The idea of the script is to run any number of commands when a
specific host stops responding to ping requests. Here are details of the ping-detect script itself.
The ping-detect script
# !/bin/sh
# Usage: ping-detect HOST [COMMANDS...]
# This script takes 2 types of arguments: hostname/IPaddress
# to ping, and the commands to run if the ping fails 5 times
# in a row. This script can only take one host/IPaddress per
# instance. Multiple independent commands can be sent to the
# script. The commands will be run one after the other.
#
# PINGREP is the entire reply from the ping command
# LOSS is the percentage loss from the ping command
# $1 must be the hostname/IPaddress of device to ping
# $2... must be the commands to run when the pings fail.
COUNTER=0
TARGET="$1"
shift