From acde7b0a30dae00691aead9e5affe1e81d911fc2 Mon Sep 17 00:00:00 2001 From: zstadler Date: Sun, 19 Feb 2023 05:29:47 +0200 Subject: [PATCH] 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. --- docker-entrypoint.sh | 32 +++----------------------------- docker-entrypoint_light.sh | 30 +----------------------------- 2 files changed, 4 insertions(+), 58 deletions(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 72eae4e5b..d655bd3a1 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,35 +1,9 @@ #!/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 # first arg is not an executable - xvfb-run -a --server-args="-screen 0 1024x768x24" -- node /usr/src/app/ "$@" & - # 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} + export DISPLAY=:99 + Xvfb "${DISPLAY}" -nolisten unix & + exec node /usr/src/app/ -p 80 "$@" fi exec "$@" diff --git a/docker-entrypoint_light.sh b/docker-entrypoint_light.sh index 33ec837ea..54d8ce54b 100644 --- a/docker-entrypoint_light.sh +++ b/docker-entrypoint_light.sh @@ -1,35 +1,7 @@ #!/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 # first arg is not an executable - node /usr/src/app/ "$@" & - # 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} + exec node /usr/src/app/ -p 80 "$@" fi exec "$@"