diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/dependencies.d/go2rtc b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/dependencies.d/go2rtc new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/finish new file mode 100755 index 000000000..46c27b22d --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/finish @@ -0,0 +1,10 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -o errexit -o nounset -o pipefail + +readonly exit_code_service="${1}" +readonly exit_code_signal="${2}" +readonly service="go2rtc-healthcheck" + +echo "[INFO] The ${service} service exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/run new file mode 100755 index 000000000..5e266fe65 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/run @@ -0,0 +1,16 @@ +#!/command/with-contenv bash +# shellcheck shell=bash +# Start the go2rtc healthcheck service + +set -o errexit -o nounset -o pipefail + +echo "[INFO] Starting go2rtc healthcheck service..." >&2 + +while sleep 1m; do + # Check if the service is running + if ! curl -fsSL http://127.0.0.1:1984/api/streams >/dev/null; then + echo "[ERROR] The go2rtc is apparently not working, restarting it..." >&2 + # We can also use -r instead of -t to send kill signal rather than term + s6-svc -t /var/run/service/go2rtc + fi +done diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish index 26b34294a..7d32038e6 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish @@ -1,32 +1,10 @@ #!/command/with-contenv bash # shellcheck shell=bash -# Take down the S6 supervision tree when the service exits set -o errexit -o nounset -o pipefail -declare exit_code_container -exit_code_container=$(cat /run/s6-linux-init-container-results/exitcode) -readonly exit_code_container readonly exit_code_service="${1}" readonly exit_code_signal="${2}" readonly service="go2rtc" -echo "Service ${service} exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 - -if [[ "${exit_code_service}" -eq 256 ]]; then - if [[ "${exit_code_container}" -eq 0 ]]; then - echo $((128 + exit_code_signal)) > /run/s6-linux-init-container-results/exitcode - fi -elif [[ "${exit_code_service}" -ne 0 ]]; then - if [[ "${exit_code_container}" -eq 0 ]]; then - echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode - fi -else - # go2rtc is not supposed to exit, so even when it exits with 0 we make the - # container with 1. We only tolerate it when Frigate is restarting. - if [[ "${exit_code_container}" -eq 0 && ! -f /dev/shm/restarting-frigate ]]; then - echo "1" > /run/s6-linux-init-container-results/exitcode - fi -fi - -exec /run/s6/basedir/bin/halt +echo "[INFO] The ${service} service exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run index e84e645f2..9a0b616c0 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run @@ -4,9 +4,6 @@ set -o errexit -o nounset -o pipefail -# Tell S6-Overlay not to restart this service -s6-svc -O . - function get_ip_and_port_from_supervisor() { local ip_address # Example: 192.168.1.10/24