Created
May 18, 2021 18:58
-
-
Save ekoeryanto/40847f7f42925c77b24c0ffa5c37e143 to your computer and use it in GitHub Desktop.
Ubuntu Haproxy Init Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 <acornet@debian.org> | |
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 | |
: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment