Created
January 17, 2014 11:34
-
-
Save gfrey/8472007 to your computer and use it in GitHub Desktop.
Upstart script for haproxy with support for reload.
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
description "Properly handle haproxy" | |
start on startup | |
env PID_PATH=/var/run/haproxy.pid | |
env BIN_PATH=/usr/sbin/haproxy | |
script | |
exec /bin/bash <<EOF | |
$BIN_PATH -f /etc/haproxy.cfg -D -p $PID_PATH | |
trap "$BIN_PATH -f /etc/haproxy.cfg -p $PID_PATH -sf \\\$(cat $PID_PATH)" SIGHUP | |
trap "kill -TERM \\\$(cat $PID_PATH) && exit 0" SIGTERM SIGINT | |
while true; do # Iterate to keep job running. | |
sleep 1 # Don't sleep to long as signals will not be handled during sleep. | |
done | |
EOF | |
end script |
You're right, of course. There should be some sort of check for the pid-file in the while loop. $Something like kill -0 $(cat $PID_PATH) || exit 1
should do the trick (untested though).
There is one small bug here. The SIGHUP trap won't write out the new pid to the pid file without -D to daemonize. Anyways thanks for this, I adapted your gist to runit
and it properly responds to reload, restart, etc.
Need to check with nbproc >1 and -Ds option to stay in foreground in "systemd daemon mode".
If pidfile still created, we can use shell builtin wait
instead of sleep 1
.
In shells I saw so far wait
is interrupted by SIGHUP and the signal handler is executed
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Would this work with
respawn
? I would assume not because the wrapper would not know that haproxy had crashed / exited.