From fcaff15795d60deb543fe0f25625785a3f5cd491 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Fri, 11 Jul 2025 07:57:49 -0500 Subject: [PATCH] move to services and add env var --- frigate/app.py | 14 ++------------ frigate/util/services.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/frigate/app.py b/frigate/app.py index 4dbc660ca..23facba40 100644 --- a/frigate/app.py +++ b/frigate/app.py @@ -2,7 +2,6 @@ import datetime import logging import multiprocessing as mp import os -import resource import secrets import shutil from multiprocessing import Queue @@ -72,6 +71,7 @@ from frigate.timeline import TimelineProcessor from frigate.util.builtin import empty_and_close_queue from frigate.util.image import SharedMemoryFrameManager, UntrackedSharedMemory from frigate.util.object import get_camera_regions_grid +from frigate.util.services import set_file_limit from frigate.version import VERSION from frigate.video import capture_camera, track_camera from frigate.watchdog import FrigateWatchdog @@ -111,16 +111,6 @@ class FrigateApp: else: logger.debug(f"Skipping directory: {d}") - def set_file_limit(self, soft_limit: int) -> None: - current_soft, current_hard = resource.getrlimit(resource.RLIMIT_NOFILE) - logger.info(f"Current file limits - Soft: {current_soft}, Hard: {current_hard}") - - new_soft = min(soft_limit, current_hard) - resource.setrlimit(resource.RLIMIT_NOFILE, (new_soft, current_hard)) - logger.info( - f"File limit set. New soft limit: {new_soft}, Hard limit remains: {current_hard}" - ) - def init_camera_metrics(self) -> None: # create camera_metrics for camera_name in self.config.cameras.keys(): @@ -599,7 +589,7 @@ class FrigateApp: self.ensure_dirs() # Set soft file limits. - self.set_file_limit(65536) + set_file_limit() # Start frigate services. self.init_camera_metrics() diff --git a/frigate/util/services.py b/frigate/util/services.py index 2fd701298..ab60adc9e 100644 --- a/frigate/util/services.py +++ b/frigate/util/services.py @@ -5,6 +5,7 @@ import json import logging import os import re +import resource import signal import subprocess as sp import traceback @@ -632,3 +633,16 @@ async def get_video_properties( result["fourcc"] = fourcc return result + + +def set_file_limit() -> None: + soft_limit = int(os.getenv("SOFT_FILE_LIMIT", "65536") or "65536") + + current_soft, current_hard = resource.getrlimit(resource.RLIMIT_NOFILE) + logger.info(f"Current file limits - Soft: {current_soft}, Hard: {current_hard}") + + new_soft = min(soft_limit, current_hard) + resource.setrlimit(resource.RLIMIT_NOFILE, (new_soft, current_hard)) + logger.info( + f"File limit set. New soft limit: {new_soft}, Hard limit remains: {current_hard}" + )