View Single Post
  #3  
Old 9th May 2012, 08:33
Ovidiu Ovidiu is offline
Senior Member
 
Join Date: Sep 2005
Posts: 1,257
Thanks: 75
Thanked 22 Times in 18 Posts
Default

Sure I can do.

Here is the munin rc script, quite long and the original that comes with the Debian munin version...:
Code:
#! /bin/bash

### BEGIN INIT INFO
# Provides:          munin-node
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $all
# Should-Stop:       $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop Munin-Node
# Description:       Start/stop Munin-Node
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/munin-node
PIDFILE=/var/run/munin/munin-node.pid
CONFFILE=/etc/munin/munin-node.conf

# log_daemon_msg() and log_progress_msg() isn't present in present in Sarge.
# Below is a copy of them from lsb-base 3.0-5, for the convenience of back-
# porters.  If the installed version of lsb-base provides these functions,
# they will be used instead.

log_daemon_msg () {
   if [ -z "$1" ]; then
       return 1
   fi

   if [ -z "$2" ]; then
       echo -n "$1:"
       return
   fi

   echo -n "$1: $2"
}

log_progress_msg () {
   if [ -z "$1" ]; then
       return 1
   fi
   echo -n " $@"
}

. /lib/lsb/init-functions
[ -r /etc/default/munin-node ] && . /etc/default/munin-node

if [ ! -x $DAEMON ]; then
       log_failure_msg "Munin-Node appears to be uninstalled."
       exit 5
elif [ ! -e $CONFFILE ]; then
       log_failure_msg "Munin-Node appears to be unconfigured."
       exit 6
fi

# Figure out if the pid file is in a non-standard location
while read line; do
       line=${line%%\#*} # get rid of comments
       set -f
       line=$(echo $line) # get rid of extraneous blanks
       set +f
       if [ "$line" != "${line#pid_file }" ]; then
               PIDFILE=${line#pid_file }
       fi
done < $CONFFILE

verify_superuser() {
       action=$1
       [ $EUID -eq 0 ] && return
       log_failure_msg "Superuser privileges required for the" \
                       "\"$action\" action."
       exit 4
}

start() {
       log_daemon_msg "Starting Munin-Node"
       mkdir -p /var/run/munin
       chown munin:root /var/run/munin
       chmod 0755 /var/run/munin
       if pidofproc -p $PIDFILE $DAEMON >/dev/null; then
               log_progress_msg "started beforehand"
               log_end_msg 0
               exit 0
       fi
       start_daemon -p $PIDFILE $DAEMON $DAEMON_ARGS
       ret=$?
       # start_daemon() isn't thorough enough, ensure the daemon has been
       # started manually
       attempts=0
       until pidofproc -p $PIDFILE $DAEMON >/dev/null; do
               attempts=$(( $attempts + 1 ))
               sleep 0.05
               [ $attempts -lt 20 ] && continue
               log_end_msg 1
               return 1
       done
       [ $ret -eq 0 ] && log_progress_msg "done"
       log_end_msg $ret
       return $ret
}

stop() {
       log_daemon_msg "Stopping Munin-Node"
       # killproc() doesn't try hard enough if the pid file is missing,
       # so create it is gone and the daemon is still running
       if [ ! -r $PIDFILE ]; then
               pid=$(pidofproc -p $PIDFILE $DAEMON)
               if [ -z "$pid" ]; then
                       log_progress_msg "stopped beforehand"
                       log_end_msg 0
                       return 0
               fi
               echo $pid 2>/dev/null > $PIDFILE
               if [ $? -ne 0 ]; then
                       log_end_msg 1
                       return 1
               fi
       fi
       killproc -p $PIDFILE /usr/bin/munin-node
       ret=$?
       # killproc() isn't thorough enough, ensure the daemon has been
       # stopped manually
       attempts=0
       until ! pidofproc -p $PIDFILE $DAEMON >/dev/null; do
               attempts=$(( $attempts + 1 ))
               sleep 0.05
               [ $attempts -lt 20 ] && continue
               log_end_msg 1
               return 1
       done
       [ $ret -eq 0 ] && log_progress_msg "done"
       log_end_msg $ret
       return $ret
}

if [ "$#" -ne 1 ]; then
       log_failure_msg "Usage: /etc/init.d/munin-node" \
                       "{start|stop|restart|force-reload|try-restart}"
       exit 2
fi

case "$1" in
 start)
       verify_superuser $1
       start
       exit $?
       ;;
 stop)
       verify_superuser $1
       stop
       exit $?
       ;;
 restart|force-reload)
       verify_superuser $1
       stop || exit $?
       start
       exit $?
       ;;
 try-restart)
       verify_superuser $1
       pidofproc -p $PIDFILE $DAEMON >/dev/null
       if [ $? -eq 0 ]; then
               stop || exit $?
               start
               exit $?
       fi
       log_success_msg "Munin-Node was stopped beforehand and thus not" \
                       "restarted."
       exit 0
       ;;
 reload)
       log_failure_msg "The \"reload\" action is not implemented."
       exit 3
       ;;
 status)
       pid=$(pidofproc -p $PIDFILE $DAEMON)
       ret=$?
       pid=${pid% } # pidofproc() supplies a trailing space, strip it
       if [ $ret -eq 0 ]; then
               log_success_msg "Munin-Node is running (PID: $pid)"
               exit 0
       # the LSB specifies that I in this case (daemon dead + pid file exists)
       # should return 1, however lsb-base returned 2 in this case up to and
       # including version 3.1-10 (cf. #381684).  Since that bug is present
       # in Sarge, Ubuntu Dapper, and (at the time of writing) Ubuntu Etch,
       # and taking into account that later versions of pidofproc() do not
       # under any circumstance return 2, I'll keep understanding invalid
       # return code for the time being, even though the LSB specifies it is
       # to be used for the situation where the "program is dead and /var/lock
       # lock file exists".
       elif [ $ret -eq 1 ] || [ $ret -eq 2 ]; then
               log_failure_msg "Munin-Node is dead, although $PIDFILE exists."
               exit 1
       elif [ $ret -eq 3 ]; then
               log_warning_msg "Munin-Node is not running."
               exit 3
       fi
       log_warning_msg "Munin-Node status unknown."
       exit 4
       ;;
 *)
       log_failure_msg "Usage: /etc/init.d/munin-node" \
                       "{start|stop|restart|force-reload|try-restart}"
       exit 2
       ;;
esac

log_failure_msg "Unexpected failure, please file a bug."
exit 1
Here is the original archivesmtp rc script:

Code:
#!/bin/sh
#
# Start up RC script for archivesmtp milter
#

# Please set these values to match your installation
ARCHIVESMTP="/usr/local/sbin/archivesmtp"
CONFIG_FILE="/usr/local/etc/archivesmtp.conf"
PID_FILE="/var/run/archivesmtp/run.pid"
SOCKET="unix:/var/run/archivesmtp/mta.sock"
CHUSER="nobody"
FLAGS=""

case "$1" in
        start)
                echo -n "Starting ArchiveSMTP"
                $ARCHIVESMTP $FLAGS -p $SOCKET -f $CONFIG_FILE -u $CHUSER -r $PID_FILE &
                echo
                ;;
        stop)
                echo -n "Stopping ArchiveSMTP" 
                kill `cat $PID_FILE`
                echo
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                ;;
esac

exit
Here is an alternative archivesmtp rc script I got from tis author but it seems not to be Debian compatible either, at least not entirely:
Code:
#!/bin/bash
#
# Start up RC script for archivesmtp milter
#
# chkconfig: - 77 23
# description: archivesmtp is a daemon which hooks into sendmail \
#              and copies email messages in to a mailbox.
# processname: archivesmtp
# pidfile: /var/run/archivesmtp/run.pid
# config: /etc/archivesmtp.conf
 
. /etc/rc.d/init.d/functions
 
RETVAL=0
ARCHIVESMTP="/usr/sbin/archivesmtp"
CONFIG_FILE="/etc/archivesmtp.conf"
PID_FILE="/var/run/archivesmtp/run.pid"
SOCKET="unix:/var/run/archivesmtp/archivesmtp.sock"
CHUSER="archivesmtp"
FLAGS="-b -a"
 
start() {
    echo -n $"Starting ArchiveSMTP: "
    daemon --check archivesmtp $ARCHIVESMTP $FLAGS -p $SOCKET -f $CONFIG_FILE -u $CHUSER -r $PID_FILE
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/archivesmtp
    return $RETVAL
}
 
stop() {
    echo -n $"Shutting down ArchiveSMTP: "
    killproc archivesmtp
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/archivesmtp
    return $RETVAL
}
 
# See how we were called.
case "$1" in
  start)
       start
       ;;
  stop)
       stop
       ;;
  restart|reload)
       stop
       start
       RETVAL=$?
       ;;
  condrestart)
       if [ -f /var/lock/subsys/archivesmtp ]; then
           stop
           start
           RETVAL=$?
       fi
       ;;
    status)
       status archivesmtp
       RETVAL=$?
       ;;
    *)
       echo $"Usage: $0 {start|stop|restart|condrestart|status}"
       exit 1
esac
 
exit $RETVAL
Don't worry about the PATHs inside the scripts, I had adapted them but it was easier to post the original scripts here...

Last edited by Ovidiu; 9th May 2012 at 08:35.
Reply With Quote