Watchdog 库不能长期工作

问题描述 投票:0回答:1

我有一个 python 脚本,它使用看门狗库来监视服务器上的文件夹,并在创建文件时对其执行某些操作。 该脚本作为 nssm 的服务运行,它基本上可以正常工作几个小时,然后尽管服务正在运行,但它没有执行任何操作,并且我在 EventViewer 中没有发现任何错误或警告。

我的代码如下所示,这是看门狗库的简单实现: ''' 导入时间 导入日志记录 输入信号

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from logging.handlers import TimedRotatingFileHandler

from project import Program
from config import Config


class MonitorFolder(FileSystemEventHandler):

    def __init__(self, config: Config) -> None:

        self.logfile_path = config.config.get('settings','logfile_path')   
        self.monitor_path = str(config.config.get('settings','monitor_path')).replace(r'\\\\',r'\\')
        #----------------Logging---------------------------------       
        ##FileHandler
        logger=logging.getLogger()
        logger.setLevel(logging.INFO)    
        handler=TimedRotatingFileHandler(filename = self.logfile_path, when ='D', interval = 1)
        formatter=logging.Formatter('%(levelname)s %(asctime)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s')
        handler.setFormatter(formatter)
        logger.addHandler(handler)
        # ##ConsoleHandler
        console=logging.StreamHandler()
        console.setFormatter (formatter)
        console.setLevel(logging.INFO)
        logging.getLogger().addHandler(console)
        #----------------Logging---------------------------------
    
    def on_created(self, event):
        
        if ('Archive' in event.src_path or 'Error' in event.src_path ):
            return
         
        logging.info(f'Folder monitor received "{event.src_path}" event for "{event.event_type}"')

        time.sleep(5)
        
        prog = Program(event.src_path, config)        
        prog.main()

    

if __name__ == "__main__":

    config = Config()
    event_handler = MonitorFolder(config)
    observer = Observer()
    observer.schedule(event_handler, path = event_handler.monitor_path, recursive = True)

    logging.info("Monitoring started...")

    observer.start()
    try:
        while(True):
            time.sleep(1)
            
    except Exception as e:
        logging.error(e)
        observer.stop()
    observer.join()

'''

此外,我的应用程序日志文件中没有任何错误。 有人有类似问题吗

python windows python-watchdog nssm
1个回答
0
投票

我不确定,但也许我也有类似的问题。就我而言,我也没有收到错误消息,但我的脚本只是停止工作。 我可以通过中断与观察到的文件夹(这是一个共享文件夹)的网络连接来重现此行为。 我自己寻找解决方案,可能最好检查网络连接并重新启动观察者,如果失败。

© www.soinside.com 2019 - 2024. All rights reserved.