Daemon vs Upstart for python脚本

mta*_*riq 40 python daemon upstart monit python-daemon

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

我正在经历不同的技术,如Daemon,Upstart和许多其他人.

这是最好的方法,以便我通过我的所有新模块使用这种方法来永远运行它们?

ayc*_*dee 81

从你提到的Upstart我会假设这个问题是针对在Ubuntu服务器上运行的服务.

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

要创建一个upstart服务,您需要添加一个文件/etc/init.叫<service-name>.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
Run Code Online (Sandbox Code Playgroud)

这意味着每次启动机器时它都会启动chat.py程序.如果它因任何原因而死亡,它将重新启动它.您不必担心双重分叉或以其他方式守护您的代码.这是由暴发户处理的.

如果你想停止或开始你的过程,你可以这样做

service chat start 
service chat stop
Run Code Online (Sandbox Code Playgroud)

chat.conf内部文件的名称中自动找到该名称/etc/init

我只是在这里介绍新贵的基本知识.还有很多其他功能可以使它更有用.全部可以通过运行man upstart.

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

Monit有点像红鲱鱼.如果您需要停机警报,则无论如何都需要在单独的服务器上运行监控程序.依靠upstart来保持进程始终在服务器上运行.然后有一个不同的服务,以确保服务器实际运行.停机发生的原因有很多.如果服务器本身发生故障,在同一服务器上运行的进程将准确地告诉您.您需要一台单独的计算机(或pingdom等第三方提供商)来提醒您该情况.


Mac*_*Gol 8

你可以看看主管.它的功能是在系统启动时启动一个进程,然后保持活动直到关闭.

最简单的配置文件是:

[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
Run Code Online (Sandbox Code Playgroud)

然后你可以将它链接到/etc/supervisord/conf.d,运行sudo supervisorctl进入主管的管理控制台,输入reread以便主管注意到新的配置条目并updatestatus列表上显示新程序.

要启动/重新启动/停止可以执行的程序sudo supervisorctl start/restart/stop my_script.

  • 给读者的一般说明,supervisor 不适用于 Python 3。 (2认同)