在Ubuntu上使用Upstart的Python服务

我想创建使用Upstart将心跳服务(python脚本)部署为服务。

我的理解是我要添加一个带有以下内容的/etc/init/myheartbeatservice.conf

 # my heartbeat service description "Heartbeat monitor" start on startup stop on shutdown script exec /path/to/my/python/script.py end script 

我的脚本启动另一个服务进程并监视进程并定期向外部服务器发送心跳。 startupshutdown正确的事件? 我的脚本也创建了一个新线程。 我假设我还需要将fork daemon添加到我的conf文件中?

谢谢。

startup是upstart在执行开始时发出的事件。 对于大多数服务来说,这还为时尚早。 你现在可能没有的东西:

  • 网络以查找DNS或avahi中的主机名(无论如何,你可能没有这个,如果它是一个你永远不会指望它的移动系统,但对于服务器,事情是不同的)
  • 一个文件系统到writeto(它在被检查后才能写入)
  • / usr从中读取python! (有时/ usr在一个单独的分区上)。

shutdown实际上根本不是一个事件,尽管这实际上已被讨论为用于未来版本的事件。

现在,您最好的选择是坚持使用旧的unix方式并使用运行级别来控制何时开始和停止。

 start on runlevel [2345] stop on runlevel [^2345] 

运行级别是识别系统状态的旧的unix方式。[2345]只是用于“多用户”模式的所有运行级别的集合,即使在笔记本电脑上也意味着正常的工作系统。 如果你使用它,你可以指望像文件系统这样的东西,以及任何静态网络。 99%的新手工作应该使用这两个启动/停止条件。

停止时,如果系统进入任何不是 2,3,4或5的运行级别,则upstart将停止服务。 运行级别0用于暂停,1表示“系统维护模式”。 6是用于rebot。

最终我们将为这些抽象添加更好的名称,但这些名称将始终有效。

此外,您不需要scriptend scriptexec关键字将直接执行您的程序。 这将节省几毫秒的时间,因为你不必执行/ bin / sh并解析exec ...行,因为upstart已经解析了作业文件。