upstart:邮件错误报告出现段错误

upstart:邮件错误报告出现段错误

我有一个由 upstart 管理的进程。它会在出现内部异常时发送错误报告,但由于该应用程序不是用 C 编写的,因此它无法捕获 SIGSEGV 并发送错误报告。(这在 C 中也不是一种好的做法)。

我认为应该可以让 upstart 启动一个脚本来发送错误报告,但我不知道该怎么做。似乎有三种可能的方法:

1) 停止后脚本。但是,EXIT_SIGNAL 在停止后脚本中不可用

2) start on stopped. 使用脚本创建单独的 upstart 配置start on stopped。这很有效,但前提是我respawn从原始配置中删除。这是不可接受的。

3)使用脚本技术:

script
  cmd &
  PID=$!
  wait $PID
  if [ $? = 139 ] ; then cleanup ; fi
end script

但是,upstart 脚本块似乎像set -e在 shell 中一样工作,因此当 cmd 失败时脚本就会退出,并且我们永远不会进入 if 块。

答案1

成功了。这个技巧与 #3 类似,但使用文件中的 shell 脚本,而不是内联在 upstart.conf 中。这样,您可以跳过,-e并且可以使用 bash 而不是 dash。

如果您确实想避免使用单独的脚本,则可以-e通过使用以下命令来绕过该行为||

script
  cmd &
  PID=$!
  wait $PID || export EXIT_CODE=$?
  if [ $EXIT_CODE -eq 139 ] ; then cleanup ; fi
end script

相关内容