Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add healthcheck for go2rtc service #5545

Merged
merged 12 commits into from
Feb 19, 2023
2 changes: 1 addition & 1 deletion docker/install_s6_overlay.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -euxo pipefail

s6_version="3.1.3.0"
s6_version="3.1.4.0"

if [[ "${TARGETARCH}" == "amd64" ]]; then
s6_arch="x86_64"
Expand Down
10 changes: 10 additions & 0 deletions docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/finish
Original file line number Diff line number Diff line change
@@ -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
16 changes: 16 additions & 0 deletions docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/run
Original file line number Diff line number Diff line change
@@ -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
felipecrs marked this conversation as resolved.
Show resolved Hide resolved
echo "[ERROR] The go2rtc is apparently not working, restarting it..." >&2
felipecrs marked this conversation as resolved.
Show resolved Hide resolved
# We can also use -r instead of -t to send kill signal rather than term
s6-svc -t /var/run/service/go2rtc
fi
done
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
longrun
24 changes: 1 addition & 23 deletions docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish
Original file line number Diff line number Diff line change
@@ -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
3 changes: 0 additions & 3 deletions docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down