我已经实现了一个WatchService来监听Linux(Redhat6)文件系统上的单个文件夹。 当我将文件拖放到文件夹(通过WinSCP)时,将检测并处理该文件。但是,当FTP进程删除文件夹中的文件时。他们没有被接走?
这是线程代码
@Override
public void run() {
log.info("Starting " + NAME);
while (mustLive) {
try {
// get Event or wait for one
WatchKey watchKey = watchService.take();
// log.debug("Event found");
// we are only interested in Create Events
List<WatchEvent<?>> events = watchKey.pollEvents();
for (WatchEvent<?> event : events) {
// we need to get the Absolute Path, so more code is needed
// to retrieve it.
Path dir = (Path) watchKey.watchable();
Path fullPath = dir.resolve((Path) event.context());
if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
log.debug("Created: " + event.context().toString());
// callback to process the file
caller.processNotificationFile(fullPath, eps);
}
if (event.kind() == StandardWatchEventKinds.ENTRY_DELETE) {
// log.debug("Delete: " + event.context().toString());
}
if (event.kind() == StandardWatchEventKinds.ENTRY_MODIFY) {
// log.debug("Modify: " + event.context().toString());
}
}
// reset the Watcher for new
boolean resetOK = watchKey.reset();
if (!resetOK) {
log.debug("Reset NOK");
continue;
}
} catch (InterruptedException e) {
killThread();
}
}
}
当我删除并删除受监控文件夹中的相同文件(应该已被拾取)时,它会被检测到并被拾取(因此Watcher正在工作并启动并运行)。 所以在FTP拷贝期间的某个地方出了问题。现在唯一的区别是文件以root用户身份FTP到文件夹,但所有文件的READ访问权限都是ON。当我知道该文件时,我是另一个用户(拥有WatcherThread的同一个用户)。
这是问题吗,其他用户拥有的文件没有被提取?如果是这样,如何解决这个问题?
感谢您的帮助, 科恩
更新: 我用两个不同的非root用户尝试了SCP,然后检测并拾取了文件。 我试图在整个文件夹上设置一个umask 0000,没有效果。