シャットダウン時に実行されるシェルスクリプトを使用したシャットダウンの防止

シャットダウン時に実行されるシェルスクリプトを使用したシャットダウンの防止

背景:

起動時にUbuntuサーバーのバックグラウンドで無制限に実行されるPythonスクリプトがあります。プロセスは、終了する前にすべてのタスクを完了するスクリプトによって処理されるSIGINTを送信することによって終了します。誰かがサーバーを終了してスクリプトを終了すると、重要なデータが失われます。スクリプトが終了する前に完了するのを待つ方法があるのか​​、それとも終了を完全に防ぐ方法があるのか​​疑問に思います。 (防止する場合、メッセージを表示できれば良いようです。)

試み:

私のPythonスクリプト(test.py)にはSIGINTハンドラがあり、SIGINTを受け取ると終了する前にすべての操作を完了します。次のシェルスクリプトを作成しました。

PROCESS=$(pgrep -f 'python test.py')
echo $PROCESS
kill -2 $PROCESS
while kill -2 $PROCESS 2> /dev/null; do
        sleep 1
done

スクリプトはkill終了するまでPythonスクリプトにコマンドを送信します(実行中は有効です)。スクリプトを/etc/init.dディレクトリに配置し、スクリプトchmod -xで実行し、/etc/rc0.d名前がK99で始まり、ディレクトリへのシンボリックリンクを作成しました。 /ディレクトリのスクリプトは終了/再起動時に実行される/etc/rc6.dため、このスクリプトは(理論的には)実行され、Pythonスクリプトが終了/再起動を完了するまで待つ必要があります。これはうまくいかないようです。操作を完了せずに終了/再開されます。/etc/rc0.d/etc/rc6.d

助けてくれてありがとう。

答え1

ランレベルをK99変更すると、K *スクリプトはoptionとして呼び出され、S *スクリプトはランレベル0(オフ)としてstop呼び出されますstartstop番号順に呼び出されます。

したがって、K99リンクを削除してリンクに置き換えて、リンクが最初に実行されるようにする必要がK00あります(実際にシステムを停止するスクリプトの前に!)。

関連情報