当Install4J的unix启动程序以SIGTERM或SIGINT终止时,应用程序继续运行

时间:2014-11-26 09:24:01

标签: install4j supervisord

我们使用Install4J创建了一个安装程序。现在我想使用docker和supervisor运行我们的应用程序。一切都运行良好,除了当我用主管停止进程时,只有启动器终止。由启动器启动的进程继续运行。 我可以定义主管向发射器发送的信号。我尝试过SIGTERM和SIGINT但仍然只有启动器终止而不是应用程序的进程。 启动程序可以处理该设置还是我必须使用java自己调用我们的应用程序?

2 个答案:

答案 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'可以正常工作。