Matthew Harrell wrote:
[...]
I don't have too much of a personal bias against it - it's mostly that a lot
of these systems we were dealing with were controlled and managed by end users
who had a minimal familiarity with Linux systems.  init.d scripts like that
are commonplace, relatively obvious, and need to be dealt with for other processes.
> [...]

In the SME Server, we have an init.d/daemontools script which we link all other init.d/thing scripts to - at last count, over 20 links to the same startup script. We then link rcX.d/Sxxthing to ../init.d/thing in the usual way and everything looks "normal".

I've attached it, in case you might find it useful.

Thanks,

Gordon
#!/bin/sh

###########################################################################
#
# System V style init script.
# Relies on runit utilities to do the real work.
# It is assumed that init scripts will be linked to this script.
#
###########################################################################

# Determine the service name and its service directory from $0

SERVICE=$(/bin/basename $0 | sed -e 's/^[SK][0-9][0-9]*//')
SERVICE_DIR=/service/$SERVICE

###########################################################################

# Source in the RedHat initscripts functions

. /etc/rc.d/init.d/functions

# The maximum amount of time to wait for a process to shut down, in seconds.
WAITMAX=60

start()
{
    /bin/echo -n "Starting $SERVICE:"
    dirs=$1
    if [ -d $1/log ]; then
        dirs="$1/log $1"
    fi
    /usr/bin/runsvctrl u $dirs
    if [ $? -ne 0 ]; then
        failure "Starting $SERVICE"
    else
        success "Starting $SERVICE"
    fi
    /bin/echo
}

status()
{
    /usr/bin/runsvstat $1
}

stop()
{
    /bin/echo -n "Stopping $SERVICE:"
    /usr/bin/svwaitdown -t $WAITMAX $1
    if [ $? -ne 0 ]; then
        failure "Stopping $SERVICE"
    else
        success "Stopping $SERVICE"
    fi
    /bin/echo
}

# This function not only shuts the service down, but removes the /service
# symlink and shuts down the logger. This should only be used during an
# uninstall of the service in question.
svdisable()
{
    /bin/echo -n "Disabling $SERVICE:"
    stop $1
    cd $1 && rm -f $1
    dirs=.
    if [ -e log ]; then
        dirs="$dirs ./log"
    fi
    /usr/bin/runsvctrl d $dirs
    /usr/bin/runsvctrl x $dirs
    if [ $? -ne 0 ]; then
        failure "Disabling $SERVICE"
    else
        success "Disabling $SERVICE"
    fi
    /bin/echo
}

case $1 in

    restart)
        action "Restarting $SERVICE" /usr/bin/runsvctrl t $SERVICE_DIR
        /usr/bin/runsvctrl u $SERVICE_DIR
            ;;

    sigalrm)
        action "Sending ALRM signal to $SERVICE" /usr/bin/runsvctrl a 
$SERVICE_DIR
            ;;

    sigcont)
        action "Sending CONT signal to $SERVICE" /usr/bin/runsvctrl c 
$SERVICE_DIR
            ;;

    sighup)
        action "Sending HUP signal to $SERVICE" /usr/bin/runsvctrl h 
$SERVICE_DIR
            ;;

    sigusr1)
        action "Sending USR1 signal to $SERVICE" /usr/bin/runsvctrl 1 
$SERVICE_DIR
            ;;

    sigusr2)
        action "Sending USR2 signal to $SERVICE" /usr/bin/runsvctrl 2 
$SERVICE_DIR
            ;;

    sigint)
        action "Sending INT signal to $SERVICE" /usr/bin/runsvctrl i 
$SERVICE_DIR
            ;;

    sigkill)
        action "Sending KILL signal to $SERVICE" /usr/bin/runsvctrl k 
$SERVICE_DIR
            ;;

    sigstop)
        action "Sending STOP signal to $SERVICE" /usr/bin/runsvctrl p 
$SERVICE_DIR
            ;;

    sigterm)
        action "Sending TERM signal to $SERVICE" /usr/bin/runsvctrl t 
$SERVICE_DIR
            ;;

    status)
        /usr/bin/runsvstat $SERVICE_DIR
            ;;

    start)
        start $SERVICE_DIR
            ;;

    stop)
        stop $SERVICE_DIR
            ;;

    svdisable)
        svdisable $SERVICE_DIR
            ;;

    *)
        echo "usage: $0 
{start|stop|restart|status|sigalrm|sigcont|sighup|sigint|sigkill|sigstop|sigterm|sigusr1|sigusr2|svdisable}"
        ;;

esac

Reply via email to