#!/bin/sh ### BEGIN INIT INFO # Provides: haproxy # Required-Start: $local_fs $network $remote_fs $syslog $named # Required-Stop: $local_fs $remote_fs $syslog $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: fast and reliable load balancing reverse proxy # Description: This file should be used to start and stop haproxy. ### END INIT INFO # Author: Arnaud Cornet PATH=/sbin:/usr/sbin:/bin:/usr/bin BASENAME=haproxy PIDFILE=/var/run/${BASENAME}.pid CONFIG=/etc/${BASENAME}/${BASENAME}.cfg HAPROXY=/usr/sbin/haproxy RUNDIR=/run/${BASENAME} EXTRAOPTS= test -x $HAPROXY || exit 0 if [ -e /etc/default/${BASENAME} ]; then . /etc/default/${BASENAME} fi test -f "$CONFIG" || exit 0 [ -f /etc/default/rcS ] && . /etc/default/rcS . /lib/lsb/init-functions check_haproxy_config() { $HAPROXY -c -f "$CONFIG" $EXTRAOPTS >/dev/null if [ $? -eq 1 ]; then log_end_msg 1 exit 1 fi } haproxy_start() { [ -d "$RUNDIR" ] || mkdir "$RUNDIR" chown haproxy:haproxy "$RUNDIR" chmod 2775 "$RUNDIR" check_haproxy_config start-stop-daemon --quiet --oknodo --start --pidfile "$PIDFILE" \ --exec $HAPROXY -- -f "$CONFIG" -D -p "$PIDFILE" \ $EXTRAOPTS || return 2 return 0 } haproxy_stop() { if [ ! -f $PIDFILE ] ; then # This is a success according to LSB return 0 fi ret=0 tmppid="$(mktemp)" # HAProxy's pidfile may contain multiple PIDs, if nbproc > 1, so loop # over each PID. Note that start-stop-daemon has a --pid option, but it # was introduced in dpkg 1.17.6, post wheezy, so we use a temporary # pidfile instead to ease backports. for pid in $(cat $PIDFILE); do echo "$pid" > "$tmppid" start-stop-daemon --quiet --oknodo --stop \ --retry 5 --pidfile "$tmppid" --exec $HAPROXY || ret=$? done rm -f "$tmppid" [ $ret -eq 0 ] && rm -f $PIDFILE return $ret } haproxy_reload() { check_haproxy_config $HAPROXY -f "$CONFIG" -p $PIDFILE -sf $(cat $PIDFILE) -D $EXTRAOPTS \ || return 2 return 0 } haproxy_status() { if [ ! -f $PIDFILE ] ; then # program not running return 3 fi for pid in $(cat $PIDFILE) ; do if ! ps --no-headers p "$pid" | grep haproxy > /dev/null ; then # program running, bogus pidfile return 1 fi done return 0 } case "$1" in start) log_daemon_msg "Starting haproxy" "${BASENAME}" haproxy_start ret=$? case "$ret" in 0) log_end_msg 0 ;; 1) log_end_msg 1 echo "pid file '$PIDFILE' found, ${BASENAME} not started." ;; 2) log_end_msg 1 ;; esac exit $ret ;; stop) log_daemon_msg "Stopping haproxy" "${BASENAME}" haproxy_stop ret=$? case "$ret" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac exit $ret ;; reload|force-reload) log_daemon_msg "Reloading haproxy" "${BASENAME}" haproxy_reload ret=$? case "$ret" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac exit $ret ;; restart) log_daemon_msg "Restarting haproxy" "${BASENAME}" haproxy_stop haproxy_start ret=$? case "$ret" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; 2) log_end_msg 1 ;; esac exit $ret ;; status) haproxy_status ret=$? case "$ret" in 0) echo "${BASENAME} is running." ;; 1) echo "${BASENAME} dead, but $PIDFILE exists." ;; *) echo "${BASENAME} not running." ;; esac exit $ret ;; *) echo "Usage: /etc/init.d/${BASENAME} {start|stop|reload|restart|status}" exit 2 ;; esac :