Services

服務停止不執行退出/清理部分

  • July 28, 2015

這是一項睡眠服務,

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")

我有一個 ubuntu 新貴任務來執行它,

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 文件中進行。

當 Upstart 停止作業時,它會發送SIGTERM信號。預設情況下SIGTERM會導致程序立即退出。這意味著執行不會流經您的其餘程式碼,它只是停止。

可以使用該模組實現信號處理程序,您可以在此處signal找到有關其用法的詳細資訊。這將允許您在接收到信號時執行程式碼。

引用自:https://unix.stackexchange.com/questions/218838