Following is linux base bash script which can be scheduled to run every X minutes and it can do following …
Personnel Note:
Its much easier to use some centralized network monitoring system like Mikrotik DUDE or NAGIOS or likewise , but as we know that every system have its known limitations, and sometime it is un necessary to setup a network monitoring system just to monitor single PC or service.
In such situation where resources are limited OR you want some thing very customized solution of your own choices with your required bells and whistles , its recommended to do it with simple bash without needing any 3rd party tool.
PSEUDO CODE:
- Check for Service status example mysqld
- If it found it running, then do nothing. Exit
- If it found it STOPPED, it will send you SMS alert for down status (one time only until next status change) via KANNEL sms gateway. It will also gonna try to start the service one time.
- If it found the service running on next run, it will send service UP info via sms. (one time only until next status change)
- I have not added email alerts, will add it later.
SCRIPT:
mkdir /temp touch /temp/checksrv.sh chmod +x /temp/checksrv.sh nano /temp/checksrv.sh
Now paste the following
#!/bin/bash # Scheduled Script to check linux service status after every 5 minutes. # If found stopped, send sms or email Alerts, but donot repeat it untill next status change. # Script Designed by Syed Jahanzaib # aacable at hotmail dot com # https://aacable.wordpress.com # 25-NOV-2015 # Last Modified = 26-NOV-2015 1500 hours # Pakistan !!! #set -x SRV="$1" #echo -e "$1" # Colors Config . . . [[ JZ . . . ]] ESC_SEQ="\x1b[" COL_RESET=$ESC_SEQ"39;49;00m" COL_RED=$ESC_SEQ"31;01m" COL_GREEN=$ESC_SEQ"32;01m" OS="1" osver=`cat /etc/issue |awk '{print $1}'` # OS checkup for UBUNTU if [[ $osver == Ubuntu ]]; then echo -e "$COL_GREEN OS = Ubuntu $COL_RESET" set OS="Ubuntu" OSPKG="apt-get install -y chkconfig" else echo -e "$COL_GREEN OS = CENTOS $COL_RESET" set OS="CENTOS" OSPKG="yum -y install chkconfig" fi ######################################## # Check if no service name is given if [ "$SRV" == "" ]; then echo -e "$COL_RED No service name have been provided. $COL_RESET" echo "Usage exmaple:" echo -e "/temp/checksrv.sh mysqld" echo "OR" echo -e "/temp/checksrv.sh (Depend on your OS deployment)" echo exit 0 else # Check if CHKCONFIG command is installed or not. CHK=`which chkconfig` # > /dev/null 2>&1` if [ "$CHK" == "" ]; then echo -e "$COL_RED CHKCONFIG command is not installed. Please install it with following command $OSPKG $COL_RESET" exit 0 else # Check if service is installed / valid or not #echo -e "$SRV" CHKSRV=`chkconfig | grep -w $SRV` if [ "$CHKSRV" == "" ]; then echo -e "$COL_RED NO SERVICE is INSTALLED WITH $SRV NAME. Exiting ...$COL_RESET" #ecoho -e "$SRV" exit 0 else DATE=`date` # COMPANY NAME COMPANY="MYNET" # Hostname HOSTNAME=`hostname` # KANNEL SMS Gateway Info KANNELURL="127.0.0.1:13013" KANNELID="kannel" KANNELPASS="kannel" CELL1="03333021909" SERVICE1="$SRV" SUBJECT="ALERT: $SRV1 is Down..." STATUS_HOLDER="/tmp/$SERVICE1_STATUS_HOLDER.txt" # SMS Msgs test for up n down MSG_UP="$COMPANY Info: $HOSTNAME - $SERVICE1 is now UP @ $DATE. Powered by Jz" MSG_DOWN="$COMPANY Alert: $HOSTNAME - $SERVICE1 is now DOWN @ $DATE. Trying to restarting it. wait 1 mnt for next result. Powered by Jz" touch $STATUS_HOLDER for SRVCHK in $SERVICE1 do PID=$(pgrep $SERVICE1) if [ "$PID" == "" ]; then echo -e "$COL_RED $SRVCHK is down $COL_RESET " if [ $(grep -c "$SRVCHK" "$STATUS_HOLDER") -eq 0 ]; then echo -e "$COL_RED ALERT: $SERVICE1 is down at $(date) / trying to restart and SENDING SMS ....$COL_RESET" echo "$MSG_DOWN" > /tmp/$SERVICE1_down.sms # Sending DOWN SMS via KANNEL cat /tmp/$SERVICE1_up.sms | curl "http://$KANNELURL/cgi-bin/sendsms?username=$KANNELID&password=$KANNELPASS&to=$CELL1" -G --data-urlencode text@- # Start $SERVICE1 service if found down service $SERVICE1 start echo "$SRVCHK" >> $STATUS_HOLDER fi else echo -e "$COL_GREEN $SRVCHK is alive and its PID are as follows... $COL_RESET \n$PID" if [ $(grep -c "$SRVCHK" "$STATUS_HOLDER") -eq 1 ]; then echo -e "$COL_GREEN INFO ALERT : $SERVICE1 is UP at $(date) / SENDING SMS .... $COL_RESET" echo "$MSG_UP" > /tmp/$SERVICE1_up.sms # Sending UP SMS via KANNEL cat /tmp/$SERVICE1_up.sms | curl "http://$KANNELURL/cgi-bin/sendsms?username=$KANNELID&password=$KANNELPASS&to=$CELL1" -G --data-urlencode text@- sed -i "/$SRVCHK/d" "$STATUS_HOLDER" fi fi done fi fi fi
USAGE:
/temp/checksrv.sh mysql #OR /temp/checksrv.sh squid
As showed in the image below …
SCHEDULE the SCRIPT in CRON:
Open crontab in editor
crontab -e
Now add following
# Run CHECK SERVICE script after very 5 minutes */5 * * * * /temp/checksrv.sh mysqld OR */5 * * * * /temp/checksrv.sh mysql
SAVE and Exit!
Regard’s
Syed Jahanzaib
Filed under: Linux Related