如何为 runit 自定义重启脚本?
How can I have a custom restart script for runit?
我正在使用 runit 管理 HAProxy,并希望安全重启以重新加载配置文件(具体来说:haproxy -f /etc/haproxy/haproxy.cfg -sf $OLD_PROCESS_ID
)。我想我可以 run sv restart haproxy
并尝试添加一个名为 /etc/service/haproxy/restart
的自定义脚本,但它似乎从未执行过。我怎么有一个特殊的重启脚本?我的方法在这里还好吗?如何使用 runit 以最小的影响重新加载我的配置?
HAProxy runit 服务脚本
/etc/service/haproxy/run
#!/bin/sh
#
# runit haproxy
#
# forward stderr to stdout for use with runit svlogd
exec 2>&1
PID_PATH=/var/run/haproxy/haproxy.pid
BIN_PATH=/opt/haproxy/sbin/haproxy
CFG_PATH=/opt/haproxy/etc/haproxy.cfg
exec /bin/bash <<EOF
$BIN_PATH -f $CFG_PATH -D -p $PID_PATH
trap "echo SIGHUP caught; $BIN_PATH -f $CFG_PATH -D -p $PID_PATH -sf \$(cat $PID_PATH)" SIGHUP
trap "echo SIGTERM caught; kill -TERM \$(cat $PID_PATH) && exit 0" SIGTERM SIGINT
while true; do # Iterate to keep job running.
sleep 1 # Wake up to handle signals
done
EOF
优雅的重新加载让一切保持正常 运行。
sv reload haproxy
完全停止和开始。
sv restart haproxy
此解决方案的灵感来自 https://gist.github.com/gfrey/8472007
我正在使用 runit 管理 HAProxy,并希望安全重启以重新加载配置文件(具体来说:haproxy -f /etc/haproxy/haproxy.cfg -sf $OLD_PROCESS_ID
)。我想我可以 run sv restart haproxy
并尝试添加一个名为 /etc/service/haproxy/restart
的自定义脚本,但它似乎从未执行过。我怎么有一个特殊的重启脚本?我的方法在这里还好吗?如何使用 runit 以最小的影响重新加载我的配置?
HAProxy runit 服务脚本
/etc/service/haproxy/run
#!/bin/sh
#
# runit haproxy
#
# forward stderr to stdout for use with runit svlogd
exec 2>&1
PID_PATH=/var/run/haproxy/haproxy.pid
BIN_PATH=/opt/haproxy/sbin/haproxy
CFG_PATH=/opt/haproxy/etc/haproxy.cfg
exec /bin/bash <<EOF
$BIN_PATH -f $CFG_PATH -D -p $PID_PATH
trap "echo SIGHUP caught; $BIN_PATH -f $CFG_PATH -D -p $PID_PATH -sf \$(cat $PID_PATH)" SIGHUP
trap "echo SIGTERM caught; kill -TERM \$(cat $PID_PATH) && exit 0" SIGTERM SIGINT
while true; do # Iterate to keep job running.
sleep 1 # Wake up to handle signals
done
EOF
优雅的重新加载让一切保持正常 运行。
sv reload haproxy
完全停止和开始。
sv restart haproxy
此解决方案的灵感来自 https://gist.github.com/gfrey/8472007