upstart 和 supervisord 用于同一件事吗?

Bla*_*man 13 ubuntu upstart supervisord

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

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

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

它们用于完全相同的目的还是在功能上存在差异?

jor*_*anm 12

不同之处在于 upstart 是一个 init 替代品,而 supervisord 是一个Process Control System. 这个解释在supervisord站点上给出:

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

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

  1. 该服务未正确守护
  2. 该服务已知死亡,需要监视和重新启动

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