最近、私はカスタムHTTPサーバーのための手作りの「キープアライブ」監視の実装を発見しました。
|
| keepalive.sh
| init.sh
|_ main.py
3つのファイルがあります。 1つ目は、システムの起動時に実行されることですkeepalive.sh
。root
rc.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.py
3番目は、アクティブな状態を維持する必要があるカスタムサーバー自体です。
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.sh
PIDを独自のPPIDとして使用して別々のプロセスグループから起動されます。main.py
彼の両親(init.sh
)が死ぬと彼も死ぬという言葉に同意します。私にとって問題は、init.sh
それが終了した後も再起動し続ける理由です。main.py
pkill
ありがとうございます!