我想在监视服务类中运行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")
我必须做什么?
答案 0 :(得分:0)
我运行脚本的问题与WatchService
无关,因为你没有发布抛出的实际异常(这会有很多帮助)我只能猜到错误,所以请检查一下:
脚本没有执行权限(chmod +x path/to/script.sh
可以轻松修复) - 在这种情况下,您会收到IOException
或类似消息{/ 1}}
系统无法找到您的脚本,因为您使用的是相对路径(在脚本名称的开头没有Permission denied
),在这种情况下,ether使用完整的脚本名称,例如/
或使用正确的相对路径/home/user/foo/script.sh
- 您应该在通过exec(How do I check if a file exists in Java?)运行它之前检查脚本是否存在
请注意,可以使用运行Java程序的工作目录调用脚本 - 因此您应该将新创建的文件路径作为参数传递给脚本,使其独立于其位置
我按照您使用的教程编写代码:
../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() });
}
它没有任何错误。