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