Railsアプリでいくつかのバックグラウンドプロセスを実行するためにdelayed_jobを使用しています。これらのプロセスは、ログファイルへの書き込みだけでなく、DBへの読み取りと書き込みも行います。
私の質問は、ジョブを停止すると、プロセスが強制終了されるのでしょうか(データが破損する可能性があります)、それともジョブが終了するのを待つのでしょうか。
それはすべて、コードの書き方によって異なります。
通常、ジョブを強制終了すると、コードのプラグがぎくしゃくし、すぐに停止します。これは、書き込みの途中、またはバッファがフラッシュされる前、またはファイルが正常に閉じられる前の可能性があります。
完了しなければならないタスクがある場合は、シグナルをトラップできます。次に、コードはシグナルを無視して実行を続行することを選択できますが、これは最適なソリューションではありません。または、正常にシャットダウンし、バッファーをフラッシュし、DB接続を閉じ、ファイルを閉じるなどを開始してから終了する可能性があります。
また、信号を無視するのが適切でない理由は、システムがシャットダウンまたは再起動する前にアプリをシャットダウンするようにOSから送信されるものがあるためです。終了しないアプリは、ユーザーまたはシステム管理者を怒らせる可能性があります。ユーザーまたはシステム管理者は、おそらく不当な方法で、アプリを終了させる方法を見つけます。
詳細については、 Signalを確認してください。