최근에 저는 맞춤형 HTTP 서버를 위한 수제 "keepalive" 감시 구현을 발견했습니다.
|
| keepalive.sh
| init.sh
|_ main.py
세 개의 파일이 있습니다. 첫 번째는 시스템 시작 시 실행된다는 것입니다 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
두 번째는 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.sh
PID를 자체 PPID로 사용하여 별도의 프로세스 그룹에서 시작됩니다. main.py
그의 부모( init.sh
)가 죽으면 그도 죽는다는 말에 동의합니다. 나에게 문제는 init.sh
그것이 종료된 후에도 계속 다시 시작되는 이유입니다.main.py
pkill
감사해요!