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 hidden or 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 |
Author
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
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 1should do the trick (untested though).