我想使用 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 表示重新启动。
最终我们会为这些抽象添加更好的名称,但这些名称总是会起作用。
此外,您不需要script
or end script
。exec
关键字将直接执行您的程序。这将节省几毫秒的时间,因为您不必执行 /bin/sh 并解析该exec ...
行,因为 upstart 已经解析了作业文件。