Simplify signal handling (#767)
Avoid implementing a complex signal relaying mechanism in `docker-entrypoint*.sh` Instead, the shell performs `exec node ...` and the `node` process receives the signals directly. Related to #560, #575, which were my initial implemetation.
This commit is contained in:
parent
49f342f877
commit
acde7b0a30
2 changed files with 4 additions and 58 deletions
|
@ -1,35 +1,9 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
handle() {
|
|
||||||
SIGNAL=$(( $? - 128 ))
|
|
||||||
echo "Caught signal ${SIGNAL}, stopping gracefully"
|
|
||||||
kill -s ${SIGNAL} $(pidof node) 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
trap handle INT TERM
|
|
||||||
|
|
||||||
refresh() {
|
|
||||||
SIGNAL=$(( $? - 128 ))
|
|
||||||
echo "Caught signal ${SIGNAL}, refreshing"
|
|
||||||
kill -s ${SIGNAL} $(pidof node) 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
trap refresh HUP
|
|
||||||
|
|
||||||
if ! which -- "${1}"; then
|
if ! which -- "${1}"; then
|
||||||
# first arg is not an executable
|
# first arg is not an executable
|
||||||
xvfb-run -a --server-args="-screen 0 1024x768x24" -- node /usr/src/app/ "$@" &
|
export DISPLAY=:99
|
||||||
# Wait exits immediately on signals which have traps set. Store return value and wait
|
Xvfb "${DISPLAY}" -nolisten unix &
|
||||||
# again for all jobs to actually complete before continuing.
|
exec node /usr/src/app/ -p 80 "$@"
|
||||||
wait $! || RETVAL=$?
|
|
||||||
while [ ${RETVAL} = 129 ] ; do
|
|
||||||
# Refressh signal HUP received. Continue waiting for signals.
|
|
||||||
wait $! || RETVAL=$?
|
|
||||||
done
|
|
||||||
wait
|
|
||||||
exit ${RETVAL}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|
|
@ -1,35 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
handle() {
|
|
||||||
SIGNAL=$(( $? - 128 ))
|
|
||||||
echo "Caught signal ${SIGNAL}, stopping gracefully"
|
|
||||||
kill -s ${SIGNAL} $(pidof node) 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
trap handle INT TERM
|
|
||||||
|
|
||||||
refresh() {
|
|
||||||
SIGNAL=$(( $? - 128 ))
|
|
||||||
echo "Caught signal ${SIGNAL}, refreshing"
|
|
||||||
kill -s ${SIGNAL} $(pidof node) 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
trap refresh HUP
|
|
||||||
|
|
||||||
if ! which -- "${1}"; then
|
if ! which -- "${1}"; then
|
||||||
# first arg is not an executable
|
# first arg is not an executable
|
||||||
node /usr/src/app/ "$@" &
|
exec node /usr/src/app/ -p 80 "$@"
|
||||||
# Wait exits immediately on signals which have traps set. Store return value and wait
|
|
||||||
# again for all jobs to actually complete before continuing.
|
|
||||||
wait $! || RETVAL=$?
|
|
||||||
while [ ${RETVAL} = 129 ] ; do
|
|
||||||
# Refressh signal HUP received. Continue waiting for signals.
|
|
||||||
wait $! || RETVAL=$?
|
|
||||||
done
|
|
||||||
wait
|
|
||||||
exit ${RETVAL}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|
Loading…
Reference in a new issue