python脚本的守护程序与Upstart

python脚本的守护程序与Upstart,python,daemon,upstart,monit,python-daemon,Python,Daemon,Upstart,Monit,Python Daemon,我已经用Python编写了一个模块,希望它在启动后继续运行,并且需要在需要更新其他模块时停止它。若模块崩溃或者并没有运行,我可能会使用monit重新启动它 我经历了不同的技术,比如,和许多其他技术 哪一种方法是最好的,这样我就可以在所有新模块中使用这种方法来永远运行它们?从您提到的Upstart开始,我假设这个问题是针对在Ubuntu服务器上运行的服务的 在Ubuntu服务器上,upstart作业实际上是创建一个始终在线的服务的最简单、最方便的选项,该服务在正确的时间启动,可以使用熟悉的命令停止

我已经用Python编写了一个模块,希望它在启动后继续运行,并且需要在需要更新其他模块时停止它。若模块崩溃或者并没有运行,我可能会使用monit重新启动它

我经历了不同的技术,比如,和许多其他技术


哪一种方法是最好的,这样我就可以在所有新模块中使用这种方法来永远运行它们?

从您提到的Upstart开始,我假设这个问题是针对在Ubuntu服务器上运行的服务的

在Ubuntu服务器上,upstart作业实际上是创建一个始终在线的服务的最简单、最方便的选项,该服务在正确的时间启动,可以使用熟悉的命令停止或重新加载

要创建upstart服务,您需要将单个文件添加到
/etc/init
。调用
.conf
。示例脚本如下所示:

description "My chat server"
author "your@email-address.com"

start on runlevel [2345]
stop on runlevel [!2345]

env AN_ENVIRONMENTAL_VARIABLE=i-want-to-set

respawn

exec /srv/applications/chat.py
这意味着每次启动机器时,它都会启动
chat.py
程序。如果它因任何原因死亡,它将重新启动它。您不必担心双重分叉或以其他方式对代码进行后台监控。这是由暴发户帮你处理的

如果您想停止或启动流程,可以使用

service chat start 
service chat stop
/etc/init

我在这里只讲暴发户的基本情况。还有许多其他功能使它更加有用。所有这些都可以通过运行
man upstart
获得

这种方法比编写自己的守护代码方便得多。一个内置Ubuntu组件的4-8行配置文件比让代码安全地双叉,然后让另一个进程监视它以确保它不会消失,更不容易出错


莫尼特有点像是在转移视线。如果需要停机警报,您需要在一台独立的服务器上运行监控程序。依靠upstart使流程始终在服务器上运行。然后使用不同的服务确保服务器实际运行。停机有许多不同的原因。在同一台服务器上运行的进程如果服务器本身发生故障,则不会告诉您任何信息。您需要一台单独的机器(或像pingdom这样的第三方提供程序)来提醒您这种情况

我使用了老式的initscript和start-stop-daemon实用程序。看看/etc/init.d中的skel,你可以查看一下。它所能做的就是在系统启动时启动一个进程,然后让它保持活动状态直到关机

最简单的配置文件是:

[program:my_script]
command = /home/foo/bar/venv/bin/python /home/foo/bar/scripts/my_script.py
environment = MY_ENV_VAR=FOO, MY_OTHER_ENV_VAR=BAR
autostart = True
autorestart = True
然后您可以将其链接到
/etc/supervisord/conf.d
,运行
sudo supervisorctl
进入supervisor的管理控制台,键入
重新读取
,以便supervisor注意到新的配置条目,并
更新
状态列表上显示新程序


要启动/重新启动/停止一个程序,您可以执行
sudo-supervisortl start/restart/stop my_-script

是否有可靠的源代码支持您的答案?在Ubuntu上运行是一个选项,但不是强制性的(daemonize将在两者上都起作用)。第二,即使与upstart一起使用,您也必须使用monit来获取停机警报。当upstart停止/启动时,您可以让upstart向您发送电子邮件()。真实来源?人们在生产中到处使用upstart。我们在生产中使用upstart,您不能将monit用于停机警报。这是毫无意义的。查看编辑后的答案,了解原因。很棒的帖子。Upstart位于Debian树中,因此它可能可以用于香草Debian或Mint以及其他衍生产品。只需交叉参考以下帖子,因为这是我为自己解决这个问题时使用的答案之一。基本上,您可以使用python守护进程轻松地创建一个合适的守护进程,然后将其作为服务运行,如上所述,有几个问题:基本上,您需要仔细了解在运行该命令后会发生什么,它是否分叉(创建一个新的子进程)?如果真的有叉子。它用叉子叉一次还是两次?《暴发户食谱》对此做了很好的解释:。向读者提供了一个一般性说明,即supervisor不使用Python 3。