确保进程始终在运行


23

我开始使用Cherokee托管网站。对于外部源(FastCGI等),如果找不到在指定的套接字或端口上运行的进程,则可以选择启动该进程。这很棒,因为这意味着如果PHP或Django站点崩溃了(它们偶尔这样做),它将自动重新启动它。

在使用PHP-FPM的新服务器上,我无法使用切诺基(它具有PHP的错误),因此我已移至NGINX。我真的很喜欢NGINX(因为它的配置样式),但是我遇到了严重的问题,进程崩溃了,再也没有产生。PHP有时会这样做,但是Django站点更成问题。我已经为它们创建了初始化脚本,它们会在启动时启动,但是如果它们在重新启动之间出现故障,这对我没有帮助。

我想我正在寻找FastCGI代理。像切诺基这样的东西,知道哪些进程应该在哪个套接字/端口上运行,并按需重新生成它们。这样的事情存在吗?有什么方法可以将其内置到NGINX中(为了易于配置)?

Answers:


13

如何daemontools的,具体的监管工具

监督监视服务。它启动服务,如果服务终止,则重新启动服务。设置新服务很容易:所有监管需求是一个带有运行该服务的运行脚本的目录。


为daemontools +1。但是,您通常不能仅仅将类似的脚本/etc/init.d/apachectl投入其中。您通常需要重写自己的简单启动脚本才能使用exec。尽管我希望看到更多使用daemontools的示例
Stefan Lasiewski,2010年

daemontools具有另一种形式,即runit。既然daemontools是公共领域,现在就不那么重要了,但是较早的发行版可能只包含runit。
卡姆(Camh)2010年


5

我是第二个daemontools建议,但是,如果您不喜欢DJB软件的工作方式(无论出于何种原因),也可以supervisord

我不久前建立了一个FreeBSD映像,用于supervisord管理nginxgunicorn,用于托管一些简单的WSGI应用程序,整个过程非常简单。

如果您是针对Django执行此操作,那么Gunicorn确实非常容易部署Django应用程序,顺便说一句。有关更多详细信息,请参见此博客文章


4

另一种选择是使用monit,这是我通常使用的一种。


3

你考虑过了god吗?

God是一个易于配置,易于扩展的用Ruby编写的监视框架。

使服务器进程和任务保持运行应该是部署过程中的简单部分。上帝的目标是成为最简单,最强大的监控应用程序。

我使用它来确保如果Rails / nginx实例掉下来,它们会恢复,尽管我没有看到内置的支持来检查它是否使用了正确的端口,但是问题是该过程失败了还是不再运行,您不会出错god



0

一个棘手的解决方案是(通过cron)定期启动一个脚本,该脚本检测进程是否关闭,并在这种情况下重新启动它。


0

有多种方法可以重新启动失败的守护程序,通常的建议是“在inittab中重新启动”,但如果机器确实被拧紧,则要考虑一些限制。

看门狗守护程序还可以通过其PID文件监视进程。但是,这仅应被视为重新启动机器的第二道防线,该机器因病得无法正常运行(例如,内存不足,前叉炸弹等),而不是监视或重新启动守护程序的主要方式。

最后,您可以考虑使用nagios监视复杂的系统,以便为管理员提供全局视图。它可以运行插件来从外部探测守护程序的操作,这是对它的功能的更完整的测试,只需激活PID。


-1

简单的答案-开始,将您的pid写在某个地方,然后每x次(秒,分钟,您的赌注)检查该过程是否启动。

长答案-以上所有都是好的方法。但是有点复杂。

还请记住,活着和回答请求是不同的事情。


1
…并用手指指望没有任何东西在PID文件上书写,擦除或将其重新用于其他守护程序,或将其指向其他一些对检查没有良好反应的无害且无关的过程为上升。☺这就是为什么一个适当的守护程序管理程序长久以来的回答,这是人们长期以来接受的更好的方法,该程序可以将守护程序作为子进程运行,并使用常规的Unix / Linux系统机制对其进行监视。
JdeBP 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.