我有一些基于 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 启动,原因如下:
- 该服务未正确守护进程
- 已知该服务已终止,需要监视并重新启动
程序未正确守护进程的一个示例是它不关闭 stdout 和 stderr 并继续将数据写入这些位置。 Supervisord 可以处理该输出的日志记录。