Date: Tue, 19 Jul 2011 12:10:40 -0500 From: Mark Felder <feld@feld.me> To: freebsd-ports@freebsd.org Subject: net/haproxy doesn't stop all processes Message-ID: <op.vyvlz2af34t2sn@tech304>
next in thread | raw e-mail | index | archive | help
Hi all, I recently installed haproxy and I am in the process of configuring redundant load balancers and I discovered a bug in the haproxy shutdown sequence. For some reason the first PID in /var/run/haproxy is the only one that gets a kill signal when you shutdown. In order to reproduce this behavior you will have to increase the number of haproxy processes with the following setting: nbproc 4 # Number of processes I can get it to kill cleanly from the shell but when I modify the pre_stop() it still doesn't work. Any thoughts? Current rc script for those who don't have it installed is below. Regards, Mark #!/bin/sh # PROVIDE: haproxy # REQUIRE: DAEMON # KEYWORD: shutdown ####### # # Add the following lines to /etc/rc.conf to enable haproxy: # # haproxy_enable (bool): default: "NO" # Set to "YES" to enable haproxy # haproxy_pidfile (str): default: /var/run/${name}.pid # Set to the full path of the pid file # haproxy_config (str): default: /usr/local/etc/${name}.conf # Set to the full path of the config file # haproxy_flags (str): default: Autogenerated using pidfile and config options # Set to override with your own options # ####### # # rc.d Script Runtime Options: # # start - starts application normally # stop - (softstop) stops all proxies and exits once all sessions are closed # forcestop - (immediate) stops all proxies and kills active sessions # reload - hot-reconfig using "-sf" option (active sessions kept) # forcereload - hot-reconfig using "-st" option (active sessions killed) # restart - equiv to "stop" then "start" # checkconfig - checks configuration file defined in haproxy_config # ####### . /etc/rc.subr name="haproxy" rcvar=`set_rcvar` command="/usr/local/sbin/haproxy" # Load Configs/Set Defaults load_rc_config $name : ${haproxy_enable:="NO"} : ${haproxy_config:="/usr/local/etc/${name}.conf"} : ${haproxy_pidfile:="/var/run/${name}.pid"} : ${haproxy_flags="-q -f ${haproxy_config} -p ${haproxy_pidfile}"} # Update the globals pidfile=${haproxy_pidfile} required_files=${haproxy_config} # Commands: start, stop, restart, reload, checkconfig extra_commands="reload checkconfig" checkconfig_cmd="haproxy_checkconfig" reload_cmd="haproxy_reload" haproxy_reload() { # Check configuration file quietly first ${command} -q -c -f ${haproxy_config} if [ $? -ne 0 ]; then echo "Error found in ${haproxy_config} - not reloading current process!" return fi rc_pid=$(check_pidfile ${haproxy_pidfile} ${command}) if [ $rc_pid ]; then if [ $rc_force ]; then ${command} ${haproxy_flags} -st ${rc_pid} else ${command} ${haproxy_flags} -sf ${rc_pid} fi else echo "No process found. Maybe $command isn't running?" fi } haproxy_checkconfig() { ${command} -c -f ${haproxy_config} } haproxy_prestart() { ${command} -q -c -f ${haproxy_config} rc_flags=${haproxy_flags} } haproxy_prestop() { # SIGUSR1 = softstop, SIGTERM = faststop if [ $rc_force ]; then sig_stop="SIGTERM" else sig_stop="SIGUSR1" fi } run_rc_command "$1"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?op.vyvlz2af34t2sn>