From 74e058c8a010ef6feb539248a550d0bb169c1e94 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 27 Dec 2010 00:04:44 +0000 Subject: import torrus 1.0.9 --- torrus/init.d/torrus.in | 211 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 torrus/init.d/torrus.in (limited to 'torrus/init.d') diff --git a/torrus/init.d/torrus.in b/torrus/init.d/torrus.in new file mode 100644 index 0000000..91e14be --- /dev/null +++ b/torrus/init.d/torrus.in @@ -0,0 +1,211 @@ +#!@SHELL@ +# +# init.d script for Torrus +# Install it as /etc/init.d/torrus (most UNIXes), +# or as /usr/local/etc/rc.d/torrus.sh (FreeBSD), or probably somewhere else. +# +# $Id: torrus.in,v 1.1 2010-12-27 00:04:39 ivan Exp $ +# Stanislav Sinyagin +# +# +### chkconfig info +# chkconfig: 2345 90 10 +# description: Starts/Stops Torrus collectors and monitors +### +# +### BEGIN INIT INFO +# Provides: collector monitor +# Required-Start: $network +# Required-Stop: $network +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Short-Description: Torrus collectors and monitors +# Description: Start/stop Torrus collectors and monitors +### END INIT INFO + +prefix=@prefix@ +sysconfdir=@sysconfdir@ +pkghome=@pkghome@ +cmddir=@pkgbindir@ +piddir=@piddir@ +sitedir=@sitedir@ +torrus_config_pl=@cfgdefdir@/torrus-config.pl + +. @cfgdefdir@/initscript.conf +if test -f @siteconfdir@/initscript.siteconf; then + . @siteconfdir@/initscript.siteconf +fi + +if test "$TORRUS_CHANGE_UID" = yes -a \ + "${LOGNAME:-root}" = root -a \ + "@SU@" != "no"; then + user=@torrus_user@ + su="@SU@ ${user} -c" +else + su="@SHELL@ -c" +fi + + +# Second argument can be the daemon name +if test x"$2" = x; then + daemons="collector monitor" + monitor_cmdopts="$TORRUS_MONITOR_DELAY" + all_daemons=yes +else + daemons=$2 + # Third and fourth arguments may be the tree name and instance + if test x"$3" != x -a x"$4" != x; then + eval trees_${daemons}=$3 + eval col_inst_${3}=$4 + read_treenames=no + fi +fi + +if test x"$TORRUS_COLLECTOR_CMDOPTS" != x; then + collector_cmdopts="$TORRUS_COLLECTOR_CMDOPTS" +fi + +if test x${read_treenames} != xno; then + + # Get the names of the trees for each daemon + for d in ${daemons}; do + eval trees_${d}=\"`@PERL@ -e 'require "'$torrus_config_pl'"; + while((my $key, $val) = each %Torrus::Global::treeConfig) { + print "$key " if $val->{run}{'${d}'}; + };'`\" + done + + # Get the collector instance numbers for each tree + eval trees=\"\$\{trees_collector\}\" + for t in ${trees}; do + eval col_inst_${t}=\"`@PERL@ -e 'require "'$torrus_config_pl'"; + print join(" ", + (0 .. $Torrus::Global::treeConfig{'${t}'}{run}{collector}-1))'`\" + done +fi + +start_daemons () { + for d in ${daemons}; do + eval trees=\"\$\{trees_${d}\}\" + eval daemon_cmdopts=\"\$\{${d}_cmdopts\}\" + + for t in ${trees}; do + if test ${d} = collector; then + eval instances=\"\$\{col_inst_${t}\}\" + for i in ${instances}; do + echo "starting Torrus collector instance ${i} for tree ${t}" + ${su} "${cmddir}/${d} --tree=${t} --instance=${i} \ + ${daemon_cmdopts} ${TORRUS_CMDOPTS}" + done + else + echo "starting Torrus ${d} for tree ${t} ${daemon_cmdopts}" + ${su} "${cmddir}/${d} --tree=${t} ${daemon_cmdopts} ${TORRUS_CMDOPTS}" + fi + done + done + + # RHEL based systems (RHEL, CentOS, Fedora) ignore the KXXtorrus script + # unless the corresponding lock is present + if test -d /var/lock/subsys; then + touch /var/lock/subsys/torrus + fi +} + +stop_daemons () { + tokill="" + for d in ${daemons}; do + + eval trees=\"\$\{trees_${d}\}\" + for t in ${trees}; do + + if test ${d} = collector; then + eval instances=\"\$\{col_inst_${t}\}\" + + for i in ${instances}; do + pidfile="${piddir}/${d}.${t}_${i}.pid" + if test -r ${pidfile}; then + tokill=${tokill}' t='${t}'_'${i}';d='${d} + echo "stopping Torrus collector instance ${i} for tree ${t}" + pid=`cat ${pidfile}` + @KILL@ ${pid} || \ + echo "Error: Cannot kill collector instance ${i} for tree ${t}" + fi + done + + else + + pidfile="${piddir}/${d}.${t}.pid" + if test -r ${pidfile}; then + tokill=${tokill}' t='${t}';d='${d} + echo "stopping Torrus ${d} for tree ${t}" + pid=`cat ${pidfile}` + @KILL@ ${pid} || echo "Error: Cannot kill ${d} for tree ${t}" + fi + + fi + done + done + + killed=`echo $tokill | wc -w` + notdead=1 + kc=$TORRUS_KILL_COUNT + while test $killed -gt 0 -a $kc -gt 0; do + echo "Sleeping for $TORRUS_KILL_SLEEP seconds to allow processes to exit" + @SLEEP@ $TORRUS_KILL_SLEEP + echo "Checking for kill resistant processes [$kc/$TORRUS_KILL_COUNT]" + kc=`expr $kc - 1` + for tuple in $tokill; do + eval $tuple + pidfile="${piddir}/${d}.${t}.pid" + if test -r ${pidfile}; then + echo " Sending kill signal to Torrus ${d} for tree ${t}" + pid=`cat ${pidfile}` + @KILL@ ${pid} || echo "Error: Cannot kill ${d} for tree ${t}" + else + echo "${d} for ${t} has stopped" + killed=`expr $killed - 1` + fi + done + done + + if test \( $killed -gt 0 \); then + echo " Killing Remaining Processes" + for tuple in $tokill; do + eval $tuple + pidfile="${piddir}/${d}.${t}.pid" + if test -r ${pidfile}; then + echo " Sending final kill -9 to Torrus ${d} for tree ${t}" + pid=`cat ${pidfile}` + @KILL@ -9 ${pid} || echo "Error: Cannot kill ${d} for tree ${t}" + @RM@ -f $pidfile + else + echo "${d} for ${t} has stopped" + fi + done + fi + + # RHEL specifics + if test x"$all_daemons" = xyes -a -d /var/lock/subsys; then + rm -f /var/lock/subsys/torrus + fi +} + +case "$1" in + 'start') start_daemons + ;; + + 'stop') stop_daemons + ;; + 'restart') stop_daemons; start_daemons + ;; + + *) echo "Usage: $0 [start|stop|restart] [collector|monitor] [tree]" + ;; + esac + +# Local Variables: +# mode: shell-script +# sh-shell: sh +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: -- cgit v1.1