gpt4 book ai didi

java - 为什么在 java servlet 中运行的 shell 脚本文件中需要 hibernate

转载 作者:行者123 更新时间:2023-12-01 09:27:21 26 4
gpt4 key购买 nike

我有一个 shell 脚本 script.sh ,它需要通过 java servlet 和手动运行。其内容为:

service avahi-daemon restart
instance=MyInstance
avahi-publish -s -d local $instance _temp._tcp 443 "model=Model1" > /dev/null 2>&1 &
# update: publish other services.

更新:它无法删除尾随的 &,因为 avahi-publish 不会返回,但一旦启动就会继续运行,并且我需要发布其他服务。

servlet 是:

public class DefaultServlet extends HttpServlet{

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
try {
Process process = Runtime.getRuntime().exec("bash script.sh");
process.waitFor();
}catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
}

问题是,如果在浏览器中访问 servlet,则服务 MyInstance 将不会发布。但是在脚本文件中附加 sleep 0.1s 就可以解决这个问题。

我的问题是,Runtime.exec() 有什么魔力吗?为什么需要 sleep 指令?

最佳答案

avahi-publish -s -d local $instance _temp._tcp 443 "model=Model1"  > /dev/null 2>&1 &

由于尾​​随 &,此脚本将退出,并且 Process.waitFor() 将在 avahi-publish 命令完成之前返回.

删除尾随的&

您还应该删除重定向,并使用 servlet 中的输出,并测试进程的退出状态。为了帮助实现这一点,我将使用 exec 来执行 avahi-publish 流程。

关于java - 为什么在 java servlet 中运行的 shell 脚本文件中需要 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39738123/

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