我正在从Java运行shell脚本。它大部分时间都有效,但偶尔会引发异常“许可被拒绝”
PrintWriter writer = new PrintWriter(folder + cmdFile, "UTF-8");
writer.println("#!/bin/bash");
writer.println(commandLine.toString());
writer.close();
Process processUtil = Runtime.getRuntime().exec("/bin/chmod +x " + folder + cmdFile );
Process process = Runtime.getRuntime().exec(folder + "./" + cmdFile);
try {
int processResponseCode = processUtil.waitFor();
processUtil = Runtime.getRuntime().exec("sleep 0.1s");
processResponseCode = processUtil.waitFor();
processResponseCode = process.waitFor();
processUtil = Runtime.getRuntime().exec(" rm " + folder + cmdFile);
processResponseCode = processUtil.waitFor();
例外
java.io.IOException: Cannot run program "/tmp/./cmd755784": error=13, Permission denied
任何可能导致这种情况的想法?
答案 0 :(得分:0)
请检查是否有任何其他进程正在使用或持有正在删除的此目录/文件的句柄。用户fuser命令检查。根据fuser的输出,脚本应该等待一段时间并设置超时来处理其他异常情况。这不属于问题的范围,但您需要在以下内容中改进编码:
PS:我建议不要使用Java中的任何脚本,除非没有其他方法。避免它。
答案 1 :(得分:0)
从/tmp
执行文件有时会出现问题,因为/tmp
经常被挂载noexec
。
尝试从其他目录运行。