upstart 和supervisord 是用来做同样的事情吗?

upstart 和supervisord 是用来做同样的事情吗?

我有一些基于 jvm 的进程,我需要确保在服务器重新启动时启动它们,并且如果它由于意外错误等而停止。

我正在运行 Ubuntu 12.04 以防万一。

我看过示例 upstart 脚本,我有点倾向于这种方式,但我想了解 upstart 或supervisord 之类的东西有什么区别。

它们的用途是否完全相同,或者功能上存在差异?

答案1

区别在于 upstart 是 init 的替代品,而supervisord 是Process Control System.这个解释是在supervisord上给出的地点:

它与 launchd、daemontools 和 runit 等程序具有一些相同的目标。与其中一些程序不同,它并不意味着作为“进程 id 1”的 init 的替代品来运行。相反,它旨在用于控制与项目或客户相关的流程,并且旨在像任何其他程序一样在启动时启动。

这意味着 Supervisord 本身将由 upstart 启动,无论是通过 upstart 作业文件还是 sysV init 脚本。就我个人而言,我选择使用进程管理器而不是简单的 init 启动,原因如下:

  1. 该服务未正确守护进程
  2. 已知该服务已终止,需要监视并重新启动

程序未正确守护进程的一个示例是它不关闭 stdout 和 stderr 并继续将数据写入这些位置。 Supervisord 可以处理该输出的日志记录。

相关内容