From 286dd9570d06795f4a07fca114a4e6121ebeaac1 Mon Sep 17 00:00:00 2001 From: thsrite Date: Fri, 4 Aug 2023 20:38:08 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=BC=80=E5=90=AF=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=90=8E=E5=86=8D=E5=90=AF=E5=8A=A8=E7=9B=91=E6=8E=A7=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/plugins/dirmonitor/__init__.py | 73 +++++++++++++++--------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/app/plugins/dirmonitor/__init__.py b/app/plugins/dirmonitor/__init__.py index 0b991928..c235c35c 100644 --- a/app/plugins/dirmonitor/__init__.py +++ b/app/plugins/dirmonitor/__init__.py @@ -88,43 +88,44 @@ class DirMonitor(_PluginBase): # 停止现有任务 self.stop_service() - # 启动任务 - monitor_dirs = self._monitor_dirs.split("\n") - if not monitor_dirs: - return - for mon_path in monitor_dirs: - if not mon_path: - continue - # 检查目录是不是媒体库目录的子目录 - if Path(mon_path).is_relative_to(settings.LIBRARY_PATH): - logger.warn(f"{mon_path} 是媒体库目录的子目录,无法监控") - self.systemmessage.put(f"{mon_path} 是媒体库目录的子目录,无法监控") - continue + if self._enabled: + # 启动任务 + monitor_dirs = self._monitor_dirs.split("\n") + if not monitor_dirs: + return + for mon_path in monitor_dirs: + if not mon_path: + continue + # 检查目录是不是媒体库目录的子目录 + if Path(mon_path).is_relative_to(settings.LIBRARY_PATH): + logger.warn(f"{mon_path} 是媒体库目录的子目录,无法监控") + self.systemmessage.put(f"{mon_path} 是媒体库目录的子目录,无法监控") + continue - try: - if self._mode == "compatibility": - # 兼容模式,目录同步性能降低且NAS不能休眠,但可以兼容挂载的远程共享目录如SMB - observer = PollingObserver(timeout=10) - else: - # 内部处理系统操作类型选择最优解 - observer = Observer(timeout=10) - self._observer.append(observer) - observer.schedule(FileMonitorHandler(mon_path, self), path=mon_path, recursive=True) - observer.daemon = True - observer.start() - logger.info(f"{mon_path} 的目录监控服务启动") - except Exception as e: - err_msg = str(e) - if "inotify" in err_msg and "reached" in err_msg: - logger.warn(f"目录监控服务启动出现异常:{err_msg},请在宿主机上(不是docker容器内)执行以下命令并重启:" - + """ - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf - echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf - sudo sysctl -p - """) - else: - logger.error(f"{mon_path} 启动目录监控失败:{err_msg}") - self.systemmessage.put(f"{mon_path} 启动目录监控失败:{err_msg}") + try: + if self._mode == "compatibility": + # 兼容模式,目录同步性能降低且NAS不能休眠,但可以兼容挂载的远程共享目录如SMB + observer = PollingObserver(timeout=10) + else: + # 内部处理系统操作类型选择最优解 + observer = Observer(timeout=10) + self._observer.append(observer) + observer.schedule(FileMonitorHandler(mon_path, self), path=mon_path, recursive=True) + observer.daemon = True + observer.start() + logger.info(f"{mon_path} 的目录监控服务启动") + except Exception as e: + err_msg = str(e) + if "inotify" in err_msg and "reached" in err_msg: + logger.warn(f"目录监控服务启动出现异常:{err_msg},请在宿主机上(不是docker容器内)执行以下命令并重启:" + + """ + echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf + echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf + sudo sysctl -p + """) + else: + logger.error(f"{mon_path} 启动目录监控失败:{err_msg}") + self.systemmessage.put(f"{mon_path} 启动目录监控失败:{err_msg}") def file_change_handler(self, event, text: str, event_path: str): """