The /etc/config/rc.local script runs by default whenever the system boots.
Place the ping-detect script in /etc/config/scripts/
Open /etc/config/rc.local and run ping-detect from this script. This will make sure that the script gets run whenever the system boots.
The first parameter taken by the ping-detect script is the hostname/ IP address of the device to ping. Any other parameters will be 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 to power cycle an RPC (PDU) outlet whenever a specific host fails to respond to a ping request.
Assume we have a serially controlled RPC connected to port01 on a CM4116. Assume we have a router powered by outlet 3 on the RPC. The router has a dns address of 208.67.222.222. The following instructions will show you how to continuously ping the dns server, and when the address fails to respond to a series of pings, the CM4116 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
Add the following line to rc.local:
/etc/config/scripts/ping-detect 208.67.222.222 /bin/bash -c \ "pmpower -l port01 -o 3 off && sleep 3 && pmpower -l port01 -o 3 on && date" \ > /tmp/output.log &
The above command will cause the ping-detect script to continuously ping the host at 208.67.222.222 which is the dns address for opendns. If the router loses connectivity to the internet the dns will not be available. . 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 "&".
Remember the rc.local script is only run by default when the system boots. You can manually run the rc.local script or theping-detect script if desired.
Also, keep in mind you need to CHMOD the rc.local file and script directory to 755
For more general information on custom scripts refer faq 255.
ping-detect script
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:
#!/bin/sh
# Usage: ping-detect HOST [COMMANDS...]
# This script takes two 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
# loop indefinitely:
while true
do
# ping the device 10 times
PINGREP=`ping -c 10 -i 1 "$TARGET" `
#get the packet loss percentage
LOSS=`echo "$PINGREP" | grep "%" | sed -e 's/.* \([0-9]*\)% .*/\1/'`
if [ "$LOSS" -eq "100" ]
then
COUNTER=`expr $COUNTER + 1`
else
COUNTER=0
sleep 30s
fi
if [ "$COUNTER" -eq 5 ]
then
COUNTER=0
"$@"
sleep 2s
fi
done
pmpower command
The pmpower command is a high level Opengear tool for manipulating remote preconfigured power devices connected to the console server via a serial or network connection. pmpower controls the power devices directly itself or through the embedded open source PowerMan or Network UPS Tools:
pmpower [-?h] [-l device | -r host] [-o outlet] [-u username] [-p password] action
-?/-h This help message
-l The serial port to use
-o The outlet on the power target to apply to
-r The remote host address for the power target
-u Override the configured username
-p Override the configured password
on This action switches the specified device or outlet(s) on
off This action switches the specified device or outlet(s) off
cycle This action switches the specified device or outlet(s) off and on again
status This action retrieves the current status of the device or outlet
Comments
0 comments
Article is closed for comments.