我有一个script.sh
需要由 java servlet 和手动运行的 shell 脚本。它的内容是:
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
需要该指令?