我已经实现了一个 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 复制过程中的某个地方出现了问题。现在唯一的区别是该文件以根用户身份通过 FTP 传输到该文件夹,但所有文件的 READ 访问权限都是 ON。当我 SCP 文件时,我是另一个用户(拥有 WatcherThread 的同一用户)。
这是问题吗,其他用户拥有的文件没有被拾取?如果是这样,如何解决这个问题?
谢谢你的帮助,科恩
更新:我尝试使用两个不同的非 root 用户进行 SCP,然后检测并拾取文件。我试图在整个文件夹上设置一个 umask 0000 ,但没有效果。