服务停止不运行退出/清理部分

服务停止不运行退出/清理部分

这是一项睡眠服务,

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文件中完成它。

答案1

当 Upstart 停止作业时,它会发送SIGTERM信号。默认情况下SIGTERM会导致程序立即退出。这意味着执行不会流经代码的其余部分,它只是停止。

可以使用该模块实现信号处理程序signal,您可以找到有关其用法的详细信息这里。这将允许您在收到信号后运行代码。

相关内容