script.sh
Java サーブレットと手動の両方で実行する必要があるシェル スクリプトがあります。その内容は次のとおりです。
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
返されないためですが、開始すると実行され続け、他のサービスを公開する必要があるためです。
サーブレットは次のとおりです。
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();
}
}
}
問題は、サーブレットがブラウザーでアクセスされた場合、サービス MyInstance が公開されないことです。しかしsleep 0.1s
、スクリプトファイルに追加すると解決します。
私の質問は、Runtime.exec() に魔法があり、なぜsleep
命令が必要なのかということです。