【问题标题】:Application keeps running when Install4J's unix launcher is terminated with SIGTERM or SIGINT当 Install4J 的 unix 启动器以 SIGTERM 或 SIGINT 终止时,应用程序继续运行
【发布时间】:2014-11-26 09:24:01
【问题描述】:

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

【问题讨论】:

  • 如果从启动器启动脚本中删除“trap ...”行会有什么不同吗?
  • 我在脚本中找不到“陷阱”行。我有没有提到启动器是使用 Install4J 6.0 创建的!?

标签: install4j supervisord


【解决方案1】:

尝试添加

pid = $!
trap 'kill $pid; exit 1' HUP INT QUIT TERM

在启动器脚本中调用 java 之后。

【讨论】:

    【解决方案2】:

    启动器脚本实际上在 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 结束退出。

    恕我直言,它远非完美,但目前可以使用。

    更新: 现在它可以正常工作了。我必须将 'exec' 定义为 'INSTALL4J_JAVA_PREFIX':

    INSTALL4J_JAVA_PREFIX="exec"
    

    默认情况下会为其分配一个空字符串。使用“exec”,它可以按预期工作。

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多