무한 while 루프의 fg 명령이 "연결 유지" 감시처럼 작동하는 이유는 무엇입니까?

무한 while 루프의 fg 명령이 "연결 유지" 감시처럼 작동하는 이유는 무엇입니까?

최근에 저는 맞춤형 HTTP 서버를 위한 수제 "keepalive" 감시 구현을 발견했습니다.

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

세 개의 파일이 있습니다. 첫 번째는 시스템 시작 시 실행된다는 것입니다 keepalive.sh.rootrc.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

두 번째는 user init.sh로 실행 됩니다 www-data.

# init.sh

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

main.py세 번째는 활성 상태를 유지해야 하는 사용자 정의 서버 자체입니다 .

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

감사해요!

관련 정보