mirror of
https://github.com/discourse/discourse.git
synced 2025-02-05 19:11:13 +00:00
00ae94cb4d
For some reason, the new master unicorn process that we detect might be replaced with another process causing the script to loop forever.
68 lines
1.4 KiB
Bash
Executable File
68 lines
1.4 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()
|
|
{
|
|
log "Reloading unicorn ($UNICORN_PID)"
|
|
kill -s USR2 $UNICORN_PID
|
|
unset NEW_UNICORN_PID
|
|
|
|
count=0
|
|
while [ "$count" -lt 30 -a -z "$NEW_UNICORN_PID" ]; do
|
|
NEW_UNICORN_PID=`ps -f --ppid $UNICORN_PID | grep 'unicorn master' | grep -v old | grep -v worker | awk '{ print $2 }'`
|
|
log "Waiting for new unicorn master pid... $NEW_UNICORN_PID"
|
|
count=$((count+1))
|
|
sleep 1
|
|
done
|
|
|
|
count=0
|
|
while [ "$count" -lt 30 -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
|
|
}
|
|
|
|
function on_reopenlogs()
|
|
{
|
|
|
|
log "Reopening logs"
|
|
kill -s USR1 $UNICORN_PID
|
|
}
|
|
|
|
export UNICORN_SUPERVISOR_PID=$$
|
|
|
|
trap on_exit EXIT
|
|
trap on_reload USR2 HUP
|
|
trap on_reopenlogs USR1
|
|
|
|
unicorn $@ &
|
|
UNICORN_PID=$!
|
|
|
|
echo "supervisor pid: $UNICORN_SUPERVISOR_PID unicorn pid: $UNICORN_PID"
|
|
|
|
while kill -0 $UNICORN_PID
|
|
do
|
|
sleep 1
|
|
done
|