summaryrefslogtreecommitdiff
path: root/torrus/init.d
diff options
context:
space:
mode:
authorivan <ivan>2010-12-27 00:04:44 +0000
committerivan <ivan>2010-12-27 00:04:44 +0000
commit74e058c8a010ef6feb539248a550d0bb169c1e94 (patch)
tree6e8d3efb218dd0f41970b62c7f29758d1ae9a937 /torrus/init.d
parent35359a73152b3d7a9ad5e3d37faf81f6fedb76e8 (diff)
import torrus 1.0.9
Diffstat (limited to 'torrus/init.d')
-rw-r--r--torrus/init.d/torrus.in211
1 files changed, 211 insertions, 0 deletions
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 <ssinyagin@yahoo.com>
+#
+#
+### 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: