upstart:segfaultのメールエラーレポート


0

upstartによって管理されるプロセスがあります。内部例外に関するエラーレポートを送信しますが、アプリはCで記述されていないため、SIGSEGVをキャッチしてエラーレポートを送信することはできません。(それはCでも良い習慣ではありません)。

エラー報告を送信するためにスクリプトを開始することは可能であると思いますが、これを行う方法はわかりません。次の3つのアプローチが考えられます。

1)ポストストップスクリプト。ただし、EXIT_SIGNALはポストストップスクリプトでは使用できません

2)start on stoppedstart on stoppedスクリプトを使用して個別のupstart構成を作成します。これはうまく機能しますがrespawn、元の設定から削除した場合のみです。それは受け入れられません。

3)スクリプト技術を使用します。

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

ただし、upstartスクリプトブロックset -eはシェルのように動作するように見えるため、cmdが失敗するとスクリプトが終了し、ifブロックに到達することはありません。

回答:


1

動作するようになった。トリックは#3に似ていますが、upstart.confでインラインではなくファイルでシェルスクリプトを使用します。そうすれば、スキップ-eでき、ダッシュではなくbashを使用できます。

別のスクリプトを本当に避けたい場合は、次-eを使用して動作をバイパスできます||

script
  cmd &
  PID=$!
  wait $PID || export EXIT_CODE=$?
  if [ $EXIT_CODE -eq 139 ] ; then cleanup ; fi
end script
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.