在java中的watch服务中运行shell

时间:2016-06-08 16:33:51

标签: java shell watchservice

我想在监视服务类中运行shell脚本,以便在新文件添加到文件夹后运行shell。 监视服务工作正常但我想添加Runtime.getRuntime().exec("home/user/test.sh");我收到了错误。 我在此之后添加运行时:

   // Dequeueing events
                    Kind<?> kind = null;
                    for(WatchEvent<?> watchEvent : key.pollEvents()) {
                        // Get the type of the event
                        kind = watchEvent.kind();
                        if (OVERFLOW == kind) {
                            continue; //loop
                        } else if (ENTRY_CREATE == kind) {
                            // A new Path was created 
                    Path newPath = ((WatchEvent<Path>) watchEvent).context();
                            // Output
                            System.out.println("New path created: " + newPath);
                          Runtime.getRuntime().exec("home/user/test.sh")

我必须做什么?

1 个答案:

答案 0 :(得分:0)

我运行脚本的问题与WatchService无关,因为你没有发布抛出的实际异常(这会有很多帮助)我只能猜到错误,所以请检查一下:

  1. 脚本没有执行权限(chmod +x path/to/script.sh可以轻松修复) - 在这种情况下,您会收到IOException或类似消息{/ 1}}

  2. 系统无法找到您的脚本,因为您使用的是相对路径(在脚本名称的开头没有Permission denied),在这种情况下,ether使用完整的脚本名称,例如/或使用正确的相对路径/home/user/foo/script.sh - 您应该在通过exec(How do I check if a file exists in Java?)运行它之前检查脚本是否存在

  3. 请注意,可以使用运行Java程序的工作目录调用脚本 - 因此您应该将新创建的文件路径作为参数传递给脚本,使其独立于其位置

  4. 我按照您使用的教程编写代码:

    ../foo/script.sh

    和脚本:

    if (OVERFLOW == kind) {
                            continue; //loop
                        } else if (ENTRY_CREATE == kind) {
                            // A new Path was created
                            Path newPath = ((WatchEvent<Path>) watchEvent).context();
                            // Output
                            System.out.println("New path created: " + newPath);
                            Runtime.getRuntime().exec(new String[] { "/home/xxx/foo.sh", newPath.toString() });
                        }
    

    它没有任何错误。