概述Java执行bash脚本,错误= 26文本文件忙
我有一个编写linux bash脚本的java代码,然后做一个chmod来添加执行权限,然后尝试执行它。 我得到一个IOException在进程开始时说错误= 26,文本文件繁忙。 我已valIDation文件已完成写入和stream已closures。 chmod工作正常,但我不断收到这个错误。
我注意到,如果我运行一个deBUGging器,并通过代码,它没有得到错误,所以很明显,有一个时间问题。 在我尝试执行bash脚本之前,如何确保chmod已经完成? 我想避免非可靠的解决scheme,如添加Thread.sleep(10000),以及“Hacky”的东西,如将try / catch块中的执行放入循环中,直到成功。
我有相当数量的代码包装进程的启动与侦听线程等,但这里是它正在做的简化版本(也试过这个代码,它有相同的结果):
String[] cmd1 = {\”/bin/chmod\”,\”750\”,postfile }; new ProcessBuilder(cmd1).redirectErrorStream(true).start().waitFor(); String[] cmd2 = { postfile }; new ProcessBuilder(cmd2).redirectErrorStream(true).start().waitFor();
每次执行后,“postfile”都有正确的750个权限,但是没有执行(由于IOException)。
Cygwin没有find/.bashrc
从bash脚本生成一个bash脚本
生成具有相同结构的多个文件
匹配模式,插入模式,直到下一个匹配
即使页面不存在,Wget也会创build输出文件
bash如何处理嵌套引号?
如何在bash / linux脚本中执行相同的循环1小时?
在linux和BSD中使用和不使用shebang的Bash脚本执行
Bash脚本在由shell提示执行时产生的结果不同于cron执行的结果
检查一个目录是否存在并且可以访问
你确定它是负责后续错误的chmod吗? 你可以检查你确定关闭输出文件,然后再尝试运行它?
如果你关闭它,那么我不知道为什么chmod应该导致这个错误,但是你可以避免使用shell运行脚本来运行chmod:
String[] cmd = {\”bash\”,postfile };
为了将来的参考,这可能是由于在这种情况下未被关闭的流造成的,但是在立即运行文件之后在文件上设置权限也会导致这个错误:
java.io.IOException: Cannot run program \”…\”: error=26,Text file busy
这是JDK中的一个可能的错误 。 就我而言,这是由这段代码造成的
files.setPosixfilePermissions(Paths.get(scriptPath),set(PosixfilePermission.OWNER_EXECUTE,PosixfilePermission.OWNER_READ)); ProcessBuilder processBuilder = new ProcessBuilder(scriptPath).directory(workingDir); processBuilder.start();
即使没有编辑脚本文件。
我不知道它是否相关,但通常你需要获取或重定向ErrorStream和inputStream(我通常让他们在我创建的ResponseStreamReader,不知道重定向的选择)。
总结
以上是内存溢出为你收集整理的Java执行bash脚本,错误= 26文本文件忙全部内容,希望文章能够帮你解决Java执行bash脚本,错误= 26文本文件忙所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容