我已经用Python编写了一个模块,希望它一旦启动就可以连续运行,并且在我需要更新其他模块时需要将其停止。如果模块崩溃或没有运行,我可能会使用monit重新启动它。
我正在经历Daemon,Upstart和许多其他技术。
哪一种是最好的方法,以便我在所有新模块中使用该方法以使其永远运行?
最佳答案
从您对Upstart的提及中,我将假设该问题是针对在Ubuntu服务器上运行的服务的。
在Ubuntu服务器上,启动新工作实际上是创建始终运行的服务的最简单,最方便的选择,该服务在正确的时间启动,并可以通过熟悉的命令停止或重新加载。
要创建 Upstart 服务,您需要向/etc/init
添加一个文件。称为<service-name>.conf
。示例脚本如下所示:
description "My chat server"
author "[email protected]"
start on runlevel [2345]
stop on runlevel [!2345]
env AN_ENVIRONMENTAL_VARIABLE=i-want-to-set
respawn
exec /srv/applications/chat.py
这意味着,每当机器启动时,它将启动
chat.py
程序。如果死于任何原因,它将重新启动它。您不必担心双重派生或以其他方式守护您的代码。由 Upstart 为您解决。如果您想停止或启动过程,可以使用
service chat start
service chat stop
从
chat
内的.conf
文件名自动找到/etc/init
名称我只在这里介绍 Upstart 的基础知识。还有许多其他功能使其变得更加有用。通过运行
man upstart
都可以使用。与编写自己的守护程序代码相比,此方法更加方便。与使您的代码安全地进行两次 fork ,然后由另一个进程对其进行监视以确保其不会消失相比,内置的Ubuntu组件的4-8行配置文件易于出错。
Monit有点像鲱鱼。如果您希望获得停机警报,则无论如何都将需要在单独的服务器上运行监视程序。依靠 Upstart 使进程始终在服务器上运行。然后使用另一项服务,以确保服务器实际正在运行。造成停机的原因有很多。如果服务器本身发生故障,则在同一服务器上运行的进程将不会告诉您任何信息。您需要一台单独的计算机(或像pingdom这样的第三方提供商)来提醒您这种情况。
关于python - 守护程序vs Upstart for python脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17747605/