首页 文章

python watchdog模块不能与redhat服务器下的django / mod_wsgi一起使用

提问于
浏览
0

我们在redhat服务器的apache2下使用django(1.7.5)和mod_wsgi,并尝试使用看门狗监视文件 .

它使用 python manager.py runserver 命令在本地工作正常,而当我将其部署到产品环境中时,不会在wsgi模式下触发事件

# wsgi.py
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

LOGGER.debug("Starting to watch for config file changes.")
fw = FileWatcher()
# filewatcher
path = settings.PROJECT_ROOT
filename = 'config.json'
class ConfigHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if not event.is_directory and event.src_path.endswith(filename):
            LOGGER.debug("The config has changed!, Reloading")

class FileWatcher(object):

    _instance = None
    _watching = False

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            LOGGER.debug("Creating new FileWatcher")
            cls._instance = super(FileWatcher, cls).__new__(cls, *args, **kwargs)

            cls.start_watching()

        return cls._instance

    @classmethod
    def start_watching(cls):
        if not cls._watching:
            LOGGER.debug("Starting to monitor the file: %s",
                        os.path.join(path, filename))
            event_handler = ConfigHandler()
            observer = Observer()
            observer.schedule(event_handler, path=path, recursive=False)
            observer.start()

            cls._watching = True

1 回答

  • 0

    找到路由原因,默认的Observer( inotify.InotifyObserver )在旧的redhat服务器上使用旧的linux内核不起作用

    它在http://pythonhosted.org/watchdog/api.html#module-watchdog.observers中说明

    inotify.InotifyObserver Linux 2.6.13+   inotify(7) based observer
    polling.PollingObserver Any fallback implementation
    

    因此我将其改为通用的

    from watchdog.observers.polling import PollingObserver
        # http://pythonhosted.org/watchdog/api.html#module-watchdog.observers
        observer = PollingObserver()
    

相关问题