【问题标题】:How to monitor the changes remote directories and files?如何监控远程目录和文件的变化?
【发布时间】:2017-09-13 18:53:06
【问题描述】:

我正在尝试监控远程目录和文件。我需要存储或记录文件和目录的更改,即(访问、写入、打开和关闭事件)。

我尝试使用 pyinotify 来监控和记录这些事件。我为本地系统文件实现了它,但我的问题是如何监视远程文件和目录。

我能否借助 ssh 或任何其他方式来记录远程文件和目录中发生的事件?

我已经给出了本地系统文件监控的代码。

import pyinotify 
import asyncore 
from .models import AccessEvents 
import threading

class MyEventHandler(pyinotify.ProcessEvent):
    def process_IN_ACCESS(self, event):
        access=AccessEvents(mode_id=1,path=event.pathname)
        access.save()
    def process_IN_ATTRIB(self, event):
        attrib = AccessEvents(mode_id=2, path=event.pathname)
        attrib.save()
    def process_IN_CLOSE_NOWRITE(self, event):
        nwrite = AccessEvents(mode_id=3, path=event.pathname)
        nwrite.save()
    def process_IN_CLOSE_WRITE(self, event):
        write = AccessEvents(mode_id=4, path=event.pathname)
        write.save()
    def process_IN_CREATE(self, event):
        create = AccessEvents(mode_id=5, path=event.pathname)
        create.save()
    def process_IN_DELETE(self, event):
        delete = AccessEvents(mode_id=6, path=event.pathname)
        delete.save()
    def process_IN_MODIFY(self, event):
        modify = AccessEvents(mode_id=7, path=event.pathname)
        modify.save()
    def process_IN_OPEN(self, event):
        open = AccessEvents(mode_id=8, path=event.pathname)
        open.save()

def startmonitor(file_or_dir):
    # watch manager
    wm = pyinotify.WatchManager()
    try:
        test=wm.add_watch(file_or_dir, pyinotify.ALL_EVENTS, rec=True)
        if test[file_or_dir]==-1:
            return 'no_such_file_or_dir'
        else:
            # event handler
            eh = MyEventHandler()
            # notifier
            notifier = pyinotify.AsyncNotifier(wm, eh)
            thread = threading.Thread(target=asyncore.loop(), args=())
            thread.daemon = True  # Daemonize thread
            thread.start()  # Start the execution
            return 'file_monitoring_started'
    except Exception as e:
        print 'error',e

startmonitor('/tmp/test')

如果有人知道远程系统文件监控,请提供您的建议。提前致谢!!!

【问题讨论】:

    标签: python ubuntu ssh remote-access pyinotify


    【解决方案1】:

    这可以通过简单的客户端-服务器模型 (http) 来完成。

    第一步是您应该在要监视的远程系统上运行文件监视程序代码。以结构化格式保存更改。例如:-

    class ChangeEvent:
    
     def __init__(self, event_name)
    
     def files_changed(self, list_files)
    

    将这些 ChangeEvents 列表存储为队列(充当缓冲区)。制作一个简单的 GET API,以便客户端可以获取这些更改事件列表。从您发送的队列中删除 ChangeEvents。

    现在在客户端应用程序上(可能是它的移动或网络,没关系), 只需定期点击 api(您在上面所做的)以获取更改。

    您还可以将这些 ChangeEvents 保存为远程服务器上的 json 或 csv,以进行持久存储。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多