배경:
부팅 시부터 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(off)으로 stop
호출됩니다 start
. stop
번호순으로 호출됩니다.
따라서 K99
링크를 제거하고 링크로 교체하여 링크가 K00
먼저 실행되도록 해야 합니다(실제로 시스템을 중지하는 스크립트 이전에!).