我们使用Install4J创建了一个安装程序。现在我想使用docker和supervisor运行我们的应用程序。一切都运行良好,除了当我用主管停止进程时,只有启动器终止。由启动器启动的进程继续运行。 我可以定义主管向发射器发送的信号。我尝试过SIGTERM和SIGINT但仍然只有启动器终止而不是应用程序的进程。 启动程序可以处理该设置还是我必须使用java自己调用我们的应用程序?
答案 0 :(得分:0)
尝试添加
pid = $!
trap 'kill $pid; exit 1' HUP INT QUIT TERM
在启动器脚本中进行java调用之后。
答案 1 :(得分:0)
启动器脚本实际上阻塞了java调用。因此,在此之后的陷阱为时已晚。 我现在就开始工作,但我对此并不满意:
trap 'kill -TERM $child' TERM
exec $INSTALL4J_JAVA_PREFIX "$app_java_home/bin/java" -Dinstall4j.jvmDir="$app_java_home" -Dexe4j.moduleName="$prg_dir/$progname" "-Dinstall4j.launcherId=181" "-Dinstall4j.swt=false" "$vmov_1" "$vmov_2" "$vmov_3" "$vmov_4" "$vmov_5" $INSTALL4J_ADD_VM_PARAMS -classpath "$local_classpath" com.install4j.runtime.launcher.UnixLauncher launch 17e8376b "$prg_dir/../log/error.log" "" GuiStart "$@"
child=$!
wait $child
exit $?
所以我首先设置陷阱然后用exec运行java调用,这样它就不会阻塞,然后我等待java结束退出。
Imho它远非完美,但它现在有效。
<强>更新强> 现在它正常工作。我必须将'exec'定义为'INSTALL4J_JAVA_PREFIX':
INSTALL4J_JAVA_PREFIX="exec"
默认情况下会为其分配一个空字符串。使用'exec'可以正常工作。