问题描述
在我的Spring-boot应用程序中,我试图触发一个Shell脚本,该脚本随后又在内部执行其他几个Shell脚本。在master.sh中调用的不会运行。实际上什么也没发生。
在高级别上,我正在尝试在master.sh中执行以下操作-
请帮助...
解决方法
我曾经苦苦挣扎的用例的快速回顾-在我的spring-boot应用程序中,用户可以选择触发一个主脚本(例如master.sh)-该主脚本在内部执行以下操作-
(a)。执行另一个脚本,该脚本存在于系统的其他位置::该脚本可能需要30分钟到3个小时以上的时间执行。
(b)。步骤(a)完成后,master.sh(主脚本)运行curl命令对我的Spring引导应用程序进行回调,以便对数据库执行更新。
步骤a和b在master.sh中多次执行
解决方案:至于从Java代码触发任何命令,我使用ProcessBuilder来实现。但是我必须在发出processBuilder.start()调用之前在下面添加其他语句,以使其起作用-
processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
以上语句将脚本输出重定向到父进程(在本例中为Java)的错误和输出流。
目前它对我有用。万一行为发生变化(我没想到),那么我将相应地更新此线程。
最后,我希望其他人分享他们的理解,为什么没有上述两个语句,我的内部脚本就无法运行。我确实理解“为什么”,但没有找到清晰的措辞来解释。谢谢大家。