Bosun Bosun init.d script


Exemple

Voici un script init.d pour Bosun qui inclut la définition de variables d'environnement pouvant être utilisées pour masquer des secrets de la configuration brute. Il utilise http://software.clapper.org/daemonize/ pour exécuter le programme en tant que démon.

#!/bin/sh
#
# /etc/rc.d/init.d/bosun
# bosun
#
# chkconfig: - 98 02
# description: bosun

### BEGIN INIT INFO
# Provides:          bosun
# Required-Start:    networking
# Required-Stop:     networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Runs teh bosun
# Description:       bosun

### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions

base_dir="/opt/bosun"
exec="/opt/bosun/bosun"
prog="bosun"
config="${base_dir}/config/prod.conf"

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog
pidfile=/var/run/bosun.pid
logfile=/var/log/$prog.log

#These "secrets" can be used in the prod.conf using syntax like ${env.CHAT} or ${env.API_KEY}
export CHAT=https://chat.company.com/rooms/123?key=123456789012345678901234567890
export API_KEY=123456789012345678901234567890

check() {
    $exec -t -c $config
    if [ $? -ne 0 ]; then
       echo "Errors found in configuration file, check it with '$exec -t'."
       exit 1
    fi
}

start() {
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    check
    echo -n $"Starting $prog: "
    # if not running, start it up here, usually something like "daemon $exec"
    ulimit -n 65536
    daemon daemonize -a -c $base_dir -e $logfile -o $logfile  -p $pidfile -l $lockfile $exec -c $config $OPTS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    # stop it here, often "killproc $prog"
    killproc -p $pidfile -d 5m
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    check
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac