Blog Archives

NDO2DB startup script for RH (EL) / OEL

Below a script designed to use the RH . /etc/init.d/functions library. It will use 2 “find” commands to test if it can find the ndo2db binairy and config file. Next it will daemonize the ndo2db process following the Redhat standard init procedure.

This script was written for Redhat enterprise linux using Nagios, Centreon (auto generation of the config)

Edit the “searchdir” for a broader searchscope. In the current code the nagios tree is searched for both the config and the ndo2db binairy.

touch a file in the init.d like so.

touch /etc/init.d/ndodaemon

NExt edit the file and add the code below.

vi /etc/init.d/ndodaemon

Please note the fact that this script uses the /etc/init.d/functions file. Not all linux distro`s deliver this file. Do check its availability in your own distro!

#!/bin/sh
#
# "$Id: ndodaemon.sh,v 0.9 2010/01/19 Chris Exp $"
#
#   Startup/shutdown script for the NDO2DB daemon under centreon/nagios.
#
#   Linux chkconfig stuff:
#
#   chkconfig: 2345 56 10
#   description: Startup/shutdown script for NDO2DB Daemon \
#                using Centreon / Nagios.

# Source function library.
. /etc/init.d/functions

# Set various vars
#DAEMON=ndo2db;
prog=ndo2db;
SEARCHDIR="/usr/local/nagios"
NDODAEMON=`find $SEARCHDIR -name "ndo2db"`;
NDOCONFIG=`find $SEARCHDIR -name "ndo2db.cfg"`;

#Check if both the ndo daemon and config are found.
#echo -n $"Searching ndo config & binairies : "
if test -f $NDODAEMON
then
        if test -f $NDOCONFIG
        then
                RETVAL=0;
                #echo "Files found!";
        else
                echo "ERROR: Config file not found!";
                exit 1;
        fi
else
        echo "ERROR: ndo2db not found!";
        exit 1;
fi
        start () {
                if test -f "/var/lock/subsys/ndo2db"
                then
                        echo "ndo2db is allready running...";
                        return 1;
                fi

                echo -n $"Starting $prog: "
                # start daemon
                daemon $NDODAEMON -c $NDOCONFIG
                RETVAL=$?
                echo
                [ $RETVAL = 0 ] && touch /var/lock/subsys/ndo2db
                return $RETVAL
        }
        stop () {
                # stop daemon
                echo -n $"Stopping $prog: "
                killproc $NDODAEMON
                RETVAL=$?
                echo
                [ $RETVAL = 0 ] && rm -f /var/lock/subsys/ndo2db
        }

        restart() {
                stop
                start
        }

        case $1 in
                start)
                        start
                ;;
                stop)
                        stop
                ;;
                restart)
                        restart
                ;;
                condrestart)
                        [ -f /var/lock/subsys/ndo2db ] && restart || :
                ;;
                reload)
                        echo -n $"Reloading $prog: "
                        killproc $NDODAEMON -HUP
                        RETVAL=$?
                        echo
                ;;
                status)
                        status $NDODAEMON
                        RETVAL=$?
                ;;
                *)

                echo $"Usage: $prog {start|stop|restart|condrestart|reload|status}"
                exit 3
        esac
exit $RETVAL

Next if you have chkconfig available as package, you should be able to add the script to the linux init using the commands;

chkconfig --add ndodaemon
chkconfig --level 2345 ndodaemon on

start the ndodaemon manually using

/etc/init.d/ndodaemon start
#or
service ndodaemon start

For those not using Centreon (a shame 😛 ) here is an example (default) ndo2db configuration file.

###################################################################
# #
# GENERATED BY CENTREON #
# #
# Developped by : #
# – Julien Mathis #
# – Romain Le Merlus #
# #
# http://www.centreon.com #
# For information : contact@centreon.com #
###################################################################
# #
# Last modification January 19, 2010, 11:11 am #
# By AMIS Services #
# #
###################################################################

ndo2db_user=nagios
ndo2db_group=nagios
socket_type=tcp
socket_name=/var/run/ndo.sock
tcp_port=5668
db_servertype=mysql
db_host=localhost
db_name=centstatus
db_port=3306
db_prefix=nagios_
db_user=centreon
max_timedevents_age=1440
max_systemcommands_age=1440
max_servicechecks_age=1440
max_hostchecks_age=1440
max_eventhandlers_age=1440

Hope this helps!

-Regards,

Advertisements

Ndo Utils startup script for usage with chkconfig.

Is functional, there is a bug in the start portion that i still need to fix. But it will start the deamon correctly and if you use the “service ndodaemon rewrite-lock” the status and stop functions will also work correctly.


#!/bin/sh
#
# chkconfig: 345 90 01
# description: Nagios NDO Utils Deamon
# ./etc/init.d/ndodaemon

prefix=/usr/sbin
Bin=ndo2db
NdoBin=$prefix/$Bin
NdoUsr=root
NdoConf=/usr/local/nagios/etc/ndo2db.cfg
RunFile=/usr/local/nagios/var/ndo2db.lock

#check if ndobin exists
if [ ! -f $NdoBin ]; then
echo "NDO Binairy doesnt exist!"
exit 1
fi

#check if ndoConfig exists
if [ ! -f $NdoConf ]; then
echo "NDO Config file not found!"
exit 1
fi

case $1 in

start)
if test -f $RunFile; then
echo "NDO Deamon allready started"
exit 1
else
echo -n "Starting the NDO Deamon:"
$NdoBin -c $NdoConf & > /dev/null 2>&1;

if [ $? -eq 0 ]; then
for i in 1 2 3 4 5 6 7 8 9 10 ; do
echo -n ".";
sleep 1
done
P=`ps -C $Bin -o pid | grep -P [0-9]`

echo "Done."
exit 0
else
echo "Failed to start the deamon, check the config file!"
exit 1
fi
fi
;;

stop)
if test -f $RunFile; then
#make sure we have both services!
`ps -C $Bin -o pid | grep -P [0-9] > $RunFile`
#Get first PID
ndo1PID=`head -n 1 $RunFile`;
#Get 2nd PID
ndo2PID=`tail -n 1 $RunFile`;
echo $ndo1PID
echo $ndo2PID
#need to make this a bit more logic, but it works for the moment....
kill $ndo1PID > /dev/null 2>&1;
kill $ndo2PID > /dev/null 2>&1;
rm $RunFile > /dev/null
if [ $? -eq 0 ]; then
echo "Done."
exit 0;
else
echo "Failed."
exit 1
fi
else
echo "No NDO deamon to stop!"
exit 1;
fi

;;

rewrite-lock)
ps -C $Bin -o pid | grep -P [0-9] > $RunFile
;;

status)
if test -f $RunFile; then
#We have a runfile, so we check based on PID
ndo1PID=`head -n 1 $RunFile`;
ndo2PID=`tail -n 1 $RunFile`;
#Process Parent NDO deamon
if [ $ndo1PID > 0 ]; then
ps -p $ndo1PID > /dev/null 2>&1;
if [ $? -eq 0 ]; then
Status1="NDO Parent (PID $ndo1PID) is alive!"
else
Status1="NDO Parent (PID $ndo1PID) not alive, remove lock file then check for orphan processes then restart deamon."
fi
else
Status1="NDO Parent (PID $ndo1PID) not alive!"
fi

if [ $ndo2PID > 0 ]; then
ps -p $ndo2PID > /dev/null 2>&1;
if [ $? -eq 0 ]; then
Status2="NDO Child (PID $ndo2PID) is alive!"
else
Status2="NDO Child (PID $ndo2PID) not alive!"
fi
else
Status2="NDO child (PID $ndo2PID) not alive!"
fi
echo $Status1
echo $Status2
exit 0
else
#We dont have a Runfile so lets see if someone started it manually.
ps -C $Bin > /dev/null 2>&1;
if [ $? -eq 0 ]; then
echo "NDO process seems to be manually started!"
exit 1
else
echo "NDO Deamon is not running."
exit 1
fi
fi
;;

*)
echo "Usage: $0 {start|stop|status|rewrite-lock}"
exit 1
;;
esac