#! /bin/sh # # chkconfig: 2345 60 40 # description: Starts the cfengine daemons for remote and periodic \ # execution of cfengine and for environment monitoring. set -e PATH=/sbin:/bin:/usr/sbin:/usr/bin CFSERVD=/usr/sbin/cfservd CFEXECD=/usr/sbin/cfexecd CFENVD=/usr/sbin/cfenvd # Has the package been 'removed' but not purged? test -f $CFSERVD || exit 0 if start-stop-daemon -V >/dev/null 2>&1; then # start-stop-daemon runs OK SSD=1 else # Probably not a Debian system SSD=0 fi ctrl_daemon () { # Usage: ctrl_daemon [] # where is 'start' or 'stop'. 'stop' args are passed to # start-stop-daemon. OPERATION=$1; shift DAEMON=$1; shift case $OPERATION in "start") set +e if [ "$SSD" = "1" ]; then CMD="start-stop-daemon --start --quiet --exec $DAEMON -- $@" else CMD="$DAEMON $@" fi $CMD if [ $? != "0" ]; then echo -n '(bg)' # We try again for 11 minutes until giving up in despair. # This is necessary for cfexecd which has a 1-minute lock # and for cfenvd with a 10-minute lock. ( # Close file descriptors exec 0<&- 1<&- 2<&- for try in 1 2 3 4 5 6 7 8 9 10 11; do sleep 60 $CMD && exit 0 done exit 1 ) & fi set -e ;; "stop") if [ "$SSD" = "1" ]; then start-stop-daemon --stop --quiet --oknodo --exec "$DAEMON" "$@" else killall "$DAEMON" || true fi ;; "*") echo 'Invalid to ctrl_daemon. Must be "start" or "stop".' >&2 ;; esac } run_cfservd_p () { test -e /etc/cfengine/cfservd.conf } case "$1" in start) echo -n "Starting cfengine2:" echo -n " cfenvd"; ctrl_daemon start $CFENVD echo -n " cfexecd"; ctrl_daemon start $CFEXECD run_cfservd_p && { echo -n " cfservd"; ctrl_daemon start $CFSERVD; } echo "." ;; stop) echo -n "Stopping cfengine2:" run_cfservd_p && { echo -n " cfservd"; ctrl_daemon stop $CFSERVD; } echo -n " cfexecd"; ctrl_daemon stop $CFEXECD echo -n " cfenvd"; ctrl_daemon stop $CFENVD echo "." ;; reload|force-reload) ;; restart) echo "Restarting cfengine2:" $0 stop sleep 1 $0 start ;; *) N=/etc/init.d/cfengine2 # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0