diff --git a/frigate/util.py b/frigate/util.py index 9c93285be..24a75b775 100755 --- a/frigate/util.py +++ b/frigate/util.py @@ -18,6 +18,7 @@ import cv2 import matplotlib.pyplot as plt import numpy as np import os +import psutil logger = logging.getLogger(__name__) @@ -534,7 +535,13 @@ def clipped(obj, frame_shape): def restart_frigate(): - os.kill(os.getpid(), signal.SIGTERM) + proc = psutil.Process(1) + # if this is running via s6, sigterm pid 1 + if proc.name() == "s6-svscan": + proc.terminate() + # otherwise, just try and exit frigate + else: + os.kill(os.getpid(), signal.SIGTERM) class EventsPerSecond: diff --git a/frigate/watchdog.py b/frigate/watchdog.py index 979ffa3a9..73cf86240 100644 --- a/frigate/watchdog.py +++ b/frigate/watchdog.py @@ -5,6 +5,10 @@ import time import os import signal +from frigate.util import ( + restart_frigate, +) + logger = logging.getLogger(__name__) @@ -30,6 +34,6 @@ class FrigateWatchdog(threading.Thread): detector.start_or_restart() elif not detector.detect_process.is_alive(): logger.info("Detection appears to have stopped. Exiting frigate...") - os.kill(os.getpid(), signal.SIGTERM) + restart_frigate() logger.info(f"Exiting watchdog...")