This commit is contained in:
Your Name
2024-06-17 12:33:20 -05:00
parent ec7743c460
commit af3cacae53
2 changed files with 25 additions and 7 deletions

View File

@@ -20,8 +20,9 @@ from openpilot.common.swaglog import cloudlog
WATCHDOG_FN = "/dev/shm/wd_"
ENABLE_WATCHDOG = os.getenv("NO_WATCHDOG") is None
_log_dir = None
def launcher(proc: str, name: str) -> None:
def launcher(proc: str, name: str, log_path: str) -> None:
try:
# import the process
mod = importlib.import_module(proc)
@@ -40,9 +41,10 @@ def launcher(proc: str, name: str) -> None:
mod.main()
except KeyboardInterrupt:
cloudlog.warning(f"child {proc} got SIGINT")
except Exception:
except Exception as e:
# can't install the crash handler because sys.excepthook doesn't play nice
# with threads, so catch it here.
with open(log_path, 'a') as file: file.write(e+"\n")
sentry.capture_exception()
raise
@@ -189,6 +191,9 @@ class NativeProcess(ManagerProcess):
if self.proc is not None:
return
global _log_dir
log_path = _log_dir+"/"+self.name+".log"
cwd = os.path.join(BASEDIR, self.cwd)
cloudlog.info(f"starting process {self.name}")
@@ -221,8 +226,10 @@ class PythonProcess(ManagerProcess):
if self.proc is not None:
return
global _log_dir
log_path = _log_dir+"/"+self.name+".log"
cloudlog.info(f"starting python {self.module}")
self.proc = Process(name=self.name, target=self.launcher, args=(self.module, self.name))
self.proc = Process(name=self.name, target=self.launcher, args=(self.module, self.name, log_path))
self.proc.start()
self.watchdog_seen = False
self.shutting_down = False
@@ -238,6 +245,7 @@ class DaemonProcess(ManagerProcess):
self.enabled = enabled
self.params = None
@staticmethod
def should_run(started, params, CP):
return True
@@ -249,6 +257,9 @@ class DaemonProcess(ManagerProcess):
if self.params is None:
self.params = Params()
global _log_dir
log_path = _log_dir+"/"+self.name+".log"
pid = self.params.get(self.param_name, encoding='utf-8')
if pid is not None:
try:
@@ -264,8 +275,8 @@ class DaemonProcess(ManagerProcess):
cloudlog.info(f"starting daemon {self.name}")
proc = subprocess.Popen(['python', '-m', self.module],
stdin=open('/dev/null'),
stdout=open('/dev/null', 'w'),
stderr=open('/dev/null', 'w'),
stdout=open(log_path, 'a'),
stderr=subprocess.STDOUT,
preexec_fn=os.setpgrp)
self.params.put(self.param_name, str(proc.pid))
@@ -275,7 +286,10 @@ class DaemonProcess(ManagerProcess):
def ensure_running(procs: ValuesView[ManagerProcess], started: bool, params=None, CP: car.CarParams=None,
not_run: list[str] | None=None) -> list[ManagerProcess]:
not_run: list[str] | None=None, log_dir: str = None) -> list[ManagerProcess]:
global _log_dir
_log_dir = log_dir
if not_run is None:
not_run = []