背景:
起動時に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
呼び出されますstart
。stop
番号順に呼び出されます。
したがって、K99
リンクを削除してリンクに置き換えて、リンクが最初に実行されるようにする必要がK00
あります(実際にシステムを停止するスクリプトの前に!)。