我想创建以使用 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
Run Code Online (Sandbox Code Playgroud)
我的脚本启动另一个服务进程并监视进程并定期向外部服务器发送心跳。是startup
和shutdown
正确的事件?我的脚本也创建了一个新线程。我假设我还需要添加fork daemon
到我的 conf 文件中?
谢谢。
startup
是 upstart 在执行开始时发出的事件。对于大多数服务来说,这还为时过早。你现在可能没有的东西:
shutdown
实际上根本不是一个事件,尽管这实际上被讨论为用于未来版本的事件。
现在,最好的办法是坚持旧的 unix 方式并使用运行级别来控制何时开始和停止。
start on runlevel [2345]
stop on runlevel [^2345]
Run Code Online (Sandbox Code Playgroud)
运行级别是识别系统处于什么状态的旧 unix 方式。 [2345] 只是用于“多用户”模式的所有运行级别的集合,即使在笔记本电脑上也意味着正常工作系统。如果你使用它,你可以指望文件系统和任何静态网络之类的东西。99% 的新贵工作都应该使用这两个启动/停止条件。
停止时,如果系统进入任何非2、3、4 或 5 的运行级别,upstart 将停止服务。运行级别 0 表示暂停,1 表示“系统维护模式”。6 用于重新机器人。
最终,我们将为这些抽象添加更好的名称,但这些将始终有效。
此外,你不需要script
或end script
那里。该exec
关键字将直接直接执行您的程序。这将减少几毫秒的时间,因为您不必执行 /bin/sh 并解析该exec ...
行,因为 upstart 已经解析了作业文件。