mirror of
https://github.com/discourse/discourse.git
synced 2026-03-03 23:54:20 +08:00
This changes the logic from opt-in to opt-out regarding Pitchfork. Now, instead of having to explicitly set `RUN_PITCHFORK` to `1`, it has to be set to `0` to switch back to Unicorn.
95 lines
2.2 KiB
Bash
Executable file
95 lines
2.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# This is a helper script you can use to supervise unicorn, it allows you to perform a live restart
|
|
# by sending it a USR2 signal
|
|
|
|
LOCAL_WEB="http://127.0.0.1:3000/"
|
|
|
|
function log() {
|
|
echo "($$) $1"
|
|
}
|
|
|
|
function on_exit() {
|
|
kill $UNICORN_PID
|
|
log "exiting"
|
|
}
|
|
|
|
function on_reload_unicorn() {
|
|
log "Reloading unicorn ($UNICORN_PID)"
|
|
kill -s USR2 $UNICORN_PID
|
|
unset NEW_UNICORN_PID
|
|
|
|
count=0
|
|
while [ "$count" -lt 180 -a -z "$NEW_UNICORN_PID" ]; do
|
|
NEW_UNICORN_PID=$(pgrep -f -P $UNICORN_PID "unicorn master")
|
|
log "Waiting for new unicorn master pid... $NEW_UNICORN_PID"
|
|
count=$((count + 1))
|
|
sleep 1
|
|
done
|
|
|
|
if [ -n "$NEW_UNICORN_PID" ]; then
|
|
count=0
|
|
while [ "$count" -lt 180 -a -z "$(ps -f --ppid $NEW_UNICORN_PID | grep worker | head -1 | awk '{ print $2 }')" ]; do
|
|
log "Waiting for new unicorn workers under $NEW_UNICORN_PID to start up..."
|
|
count=$((count + 1))
|
|
sleep 1
|
|
done
|
|
|
|
curl $LOCAL_WEB &>/dev/null
|
|
kill -s QUIT $UNICORN_PID
|
|
log "Old pid is: $UNICORN_PID New pid is: $NEW_UNICORN_PID"
|
|
UNICORN_PID=$NEW_UNICORN_PID
|
|
else
|
|
log "Unicorn is taking too long to reload...Sending TERM to $UNICORN_PID"
|
|
kill -s TERM $UNICORN_PID
|
|
fi
|
|
}
|
|
|
|
function on_reload_pitchfork() {
|
|
log "Reloading pitchfork ($UNICORN_PID)"
|
|
OLD_PID=$UNICORN_PID
|
|
pitchfork "${PITCHFORK_ARGS[@]}" &
|
|
UNICORN_PID=$!
|
|
log "Old pid is: $OLD_PID New pid is: $UNICORN_PID"
|
|
|
|
count=0
|
|
while [ "$count" -lt 180 -a -z "$(pgrep -f -P $UNICORN_PID worker)" ]; do
|
|
log "Waiting for new pitchfork workers under $UNICORN_PID to start up..."
|
|
count=$((count + 1))
|
|
sleep 1
|
|
done
|
|
|
|
kill $OLD_PID 2>/dev/null
|
|
}
|
|
|
|
function on_reopenlogs() {
|
|
log "Reopening logs"
|
|
kill -s USR1 $UNICORN_PID
|
|
}
|
|
|
|
export UNICORN_SUPERVISOR_PID=$$
|
|
|
|
if [[ "$RUN_PITCHFORK" != "0" ]]; then
|
|
PITCHFORK_ARGS=()
|
|
for arg in "$@"; do
|
|
PITCHFORK_ARGS+=("${arg/unicorn.conf.rb/pitchfork.conf.rb}")
|
|
done
|
|
fi
|
|
|
|
trap on_exit EXIT
|
|
if [[ "$RUN_PITCHFORK" == "0" ]]; then
|
|
trap on_reload_unicorn USR2 HUP
|
|
trap on_reopenlogs USR1
|
|
unicorn "$@" &
|
|
else
|
|
trap on_reload_pitchfork USR2 HUP
|
|
pitchfork "${PITCHFORK_ARGS[@]}" &
|
|
fi
|
|
|
|
UNICORN_PID=$!
|
|
|
|
echo "supervisor pid: $UNICORN_SUPERVISOR_PID unicorn pid: $UNICORN_PID"
|
|
|
|
while kill -0 $UNICORN_PID; do
|
|
sleep 1
|
|
done
|