如何监控远程目录和文件的变化?
How to monitor the changes remote directories and files?
我正在尝试监控远程目录和文件。我需要存储或记录文件和目录的更改,即(访问、写入、打开和关闭事件)。
我尝试使用 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')
如果有人知道远程系统文件监控,请提供您的建议。提前致谢!!!
可以使用简单的客户端-服务器模型 (http) 来完成。
第一步是您应该 运行 在您要监视的远程系统上文件监视程序代码。以结构化格式保存更改。例如:-
class ChangeEvent:
def __init__(self, event_name)
def files_changed(self, list_files)
将这些 ChangeEvents 列表存储为队列(充当缓冲区)。做一个简单的 GET API 以便客户端可以获得这些更改事件列表。从您发送的队列中删除 ChangeEvents。
现在在客户端应用程序(可能是移动端或网络端,无关紧要),
只需定期点击 api(您在上面所做的)即可获得更改。
您还可以在远程服务器上将这些 ChangeEvents 保存为 json 或 csv,以进行持久存储。
我正在尝试监控远程目录和文件。我需要存储或记录文件和目录的更改,即(访问、写入、打开和关闭事件)。
我尝试使用 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')
如果有人知道远程系统文件监控,请提供您的建议。提前致谢!!!
可以使用简单的客户端-服务器模型 (http) 来完成。
第一步是您应该 运行 在您要监视的远程系统上文件监视程序代码。以结构化格式保存更改。例如:-
class ChangeEvent:
def __init__(self, event_name)
def files_changed(self, list_files)
将这些 ChangeEvents 列表存储为队列(充当缓冲区)。做一个简单的 GET API 以便客户端可以获得这些更改事件列表。从您发送的队列中删除 ChangeEvents。
现在在客户端应用程序(可能是移动端或网络端,无关紧要), 只需定期点击 api(您在上面所做的)即可获得更改。
您还可以在远程服务器上将这些 ChangeEvents 保存为 json 或 csv,以进行持久存储。