종료/정리 부분을 실행하지 않고 서비스가 중지되었습니다.

종료/정리 부분을 실행하지 않고 서비스가 중지되었습니다.

수면서비스 입니다

import time
bufsize = 0
f = open("/home/user/sleep-log", "w", bufsize)
try:
  f.write("going for a deep sleep......")
  time.sleep( 1000000000)
except:
  import traceback; f.write(traceback.format_exc())
finally:
  f.write("that is surprising.. final block just ran")

이것을 실행하기 위한 우분투 시작 작업이 있습니다.

description "sleeper"
author "saravana"
start on runlevel [2345]
stop on runlevel [!2345]
script
  exec /usr/bin/python /home/user/a.py
end script

내가 그럴 때,

service  sleeper start
service sleeper stop

로그 파일에는 다음이 포함됩니다.

going for a deep sleep.......

Finally블록을 건너뜁니다. 정리 코드가 항상 실행되도록 하려면 어떻게 해야 합니까? conf 파일을 사용하여 수행할 수 있지만 post stop script기존의 이유로 Python 파일에서 수행하고 싶습니다.

답변1

Upstart가 작업을 중지하면 SIGTERM신호를 보냅니다. 기본적으로 SIGTERM프로그램이 즉시 종료됩니다. 이는 실행이 나머지 코드를 통해 진행되지 않고 단지 중지됨을 의미합니다.

이 모듈을 사용하여 신호 처리기를 구현할 수 있으며 signal사용법에 대한 세부 정보를 찾을 수 있습니다.여기. 이렇게 하면 신호를 받은 후 코드를 실행할 수 있습니다.

관련 정보