プロセスの監視に runit を使用しています。サービス用の次の単純な実行スクリプトがあります。
#!/bin/sh -e
cd /opt/myapp
exec 2>&1
exec chpst -u ubuntu /home/ubuntu/.rvm/bin/myapp_foreman start -t 1 -c web=1,worker=1
これにより、RVM ラッパーを使用して適切な RVM 環境でラップされた foreman が起動します。すべてが正常に開始および実行されますが、発行sv down myapp
すると、フォアマンが SIGTERM の受信を報告し、フォアマン プロセスが終了したことをログで確認できますが、子 Web およびワーカー プロセスは引き続き実行されます。
この問題は、rinit ではなく kill を使用して手動で SIGTERM をフォアマンに送信した場合にも発生するため、rinit 固有ではない可能性があります。ただし、Foreman を対話的に実行してから Cc を実行して SIGINT を送信すると、正しく動作します。ただし、kill を介して SIGINT と SIGKILL を送信しても機能しません。
runit スクリプトでここにあるように、非対話的に実行されたときにフォアマンに子プロセスを終了させる方法はありますか?