gpt4 book ai didi

java - java中如何检查shell脚本是否执行成功

转载 作者:行者123 更新时间:2023-11-30 02:44:53 25 4
gpt4 key购买 nike

我的代码是这样的脚本“script.sh”需要大约 7 分钟才能完全执行

private void function(String par1,String par2,String par3,String par4){
String logFile = logFolder + par1 + "_label.log";
String cmd = " /bin/sh " + scriptFolder + "script.sh" + " " +
par1 + " "
+ par2 + " "
+ par3 + " "
+ par4 + " > " +
logFile + " 2>&1 ";
logger.info("label update script" +cmd);
/* vm info */

String host = ConstantsServers.LABEL_UPDATE_SERVER;
String user = "USER";
String passwd = System.getenv("USER_PW");
/*
* start the script as user on the server
*/
new RunCmdViaSSH(host, user, passwd, cmd);
logger.debug("Log file created at:" +logFile);

}

此代码执行 shell 脚本并将输出存储在日志文件中。我如何在java中检查这个shell脚本是否成功运行。请提出建议。

我尝试使用文件阅读器和类似这样的代码检查文件的最后一行

try (BufferedReader br = new BufferedReader(new FileReader(file))) {

//checks whether the script ran successfully or not
String strLine = null,tmp;
while ((tmp = br.readLine()) != null) {
strLine=tmp;
}
String lastLine = strLine;
logger.debug(lastLine);
if (lastLine.contains("script ran successfully")) {
logger.debug("script passed");
}
else{
logger.debug("script failed");
}

但是这段代码的问题是它不会等到日志文件完全更新,它只会读取前几行并打印其他部分。

还有其他方法可以做到这一点吗?请建议

最佳答案

处理这个问题的最佳方法是使用 ProcessBuilder API,它可以让您控制执行。您可以利用其 Process API 来等待处理,直到它完成执行,并且还将返回退出代码。(同步处理)

下面是如何使用此 API 的示例

ProcessBuilder pb = new ProcessBuilder("script.sh", arg1, arg2);
Process p = pb.start();
int exitCode = p.waitFor();

您需要检查进程是否终止,您可以使用 p.waitFor() 来执行此操作,它会阻塞直到进程完成。该调用的返回值是您调用的系统命令的返回码。

如果你的exitCode值为0,则表示执行成功。

最适合您的需求

Causes the current thread to wait, if necessary, until the process represented by this Process object has terminated.

关于java - java中如何检查shell脚本是否执行成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40481390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com