2

我已经实现了一个 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 ,但没有效果。

4

0 回答 0