無限のwhileループのfgコマンドが「接続を維持」監視のように動作するのはなぜですか?

無限のwhileループのfgコマンドが「接続を維持」監視のように動作するのはなぜですか?

最近、私はカスタムHTTPサーバーのための手作りの「キープアライブ」監視の実装を発見しました。

|
|   keepalive.sh
|   init.sh
|_  main.py

3つのファイルがあります。 1つ目は、システムの起動時に実行されることですkeepalive.shrootrc.local

# keepalive.sh

while true
do
    if curl -s "localhost:8080/alive.txt" | grep -q "ALIVE"; then
        echo "UP
    else
        echo "Restarting..."
        pkill -u www-data -SIGKILL
    fi
    sleep 30
done

2番目はuserinit.shとして実行されますwww-data

# init.sh

set -m
/usr/bin/python3 /var/www/main.py &
while true; do fg; sleep 1; done

main.py3番目は、アクティブな状態を維持する必要があるカスタムサーバー自体です。

from server import Server

HOST = '0.0.0.0'
PORT = 8080

if __name__ == "__main__":
    Server(HOST,PORT).listen()

私はそれがどのように機能するのかよくわかりませんinit.sh。フラグとして-m有効職業管理fgスクリプトファイルで使用します。main.pyバックグラウンドで送信してfg無限に実行する目的は何ですかwhile&ここでは、サーバーの起動後にループを入力する必要があることを知っていますが、なぜ正しいfg(単純ではない)を使用するのですか?true

私が理解していないもう一つのことは、init.shシャットダウン時に再開される理由です-SIGKILL。 Pythonスクリプトは、init.shPIDを独自のPPIDとして使用して別々のプロセスグループから起動されます。main.py彼の両親(init.sh)が死ぬと彼も死ぬという言葉に同意します。私にとって問題は、init.shそれが終了した後も再起動し続ける理由です。main.pypkill

ありがとうございます!

ベストアンサー1

おすすめ記事