在 Ubuntu 上使用 Upstart 的 Python 服务

在 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 

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

谢谢。

答案1

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

  • 网络在 DNS 或 avahi 中查找主机名(您可能没有这个功能,如果是移动系统,您永远不能指望这个,但对于服务器,情况就不同了)
  • 要写入的文件系统(检查后才可写入)
  • /usr 读取 python!(有时 /usr 位于单独的分区上)。

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

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

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

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

在停止状态下,如果系统进入任何运行级别不是2、3、4 或 5,upstart 将停止服务。运行级别 0 表示暂停,1 表示“系统维护模式”。6 表示重新启动。

最终我们会为这些抽象添加更好的名称,但这些名称总是会起作用。

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

相关内容