如何以自动化的方式对我的服务进行适当的监控?那么,如果发生崩溃,它会自动重新启动吗?

如何以自动化的方式对我的服务进行适当的监控?那么,如果发生崩溃,它会自动重新启动吗?

如何设置对我的系统服务的监控?要么使用自动脚本,每时每刻进行扫描,无论是否httpd, mysqld, and my custom daemon正在运行,如果不运行,它会自动即时重新启动吗?

任何想法?

例如:

*Day 1:* System is running in Rail way where no support can be 24/7 available, Day 1 was fine. 
*Day 2:* System in the middle of the Rail way crashed cause httpd and mysqld for some reason not running the service

如何实现自动化,以便service httpd保持运行并service mysqld保持运行?

答案1

有多种工具可以做到这一点(其中,除了 daemontools 和 perp 之外,我没有太多使用经验):

在我的工作场所,我们喜欢的是罪犯,这是我们基础设施的最佳特色。其中一些工具仅执行您想要的全部功能的子集,因此它们可能不适合您的用例。

答案2

正如其他答案中提到的,丹·伯恩斯坦的守护进程工具开始了一系列共享相同原始机制的工具集:

在几乎所有这些中,人们编写一个run运行/作为守护进程的程序,服务管理器或主管进程只是使用正常的 Unix 和 Linux 机制将其作为分叉子进程进行监视。对于 Apache 和 MySQL,您正踏入一个很多的人以前踩过,并且有很多关于如何在 daemontools-family 服务管理下运行这些服务器的示例。这里仅列出一些:

Chris Down 认为较大的工具集可能不合适。事实并非如此。虽然所有这些工具集都是连贯且自洽的,但它们都不要求人们使用除任何特定情况下所需的工具之外的任何工具。也可以混合搭配。人们可以使用 Laurent Bercot 的execlineb及其在 perp 下的所有实用程序,或者我的nosh脚本解释器及其在 runit 下的所有实用程序;就像人们可以chpst在我的service-manager.

同样,您可以从 systemd(如果您仅使用 Linux)或 launchd(如果您使用 MacOS 10)运行 Apache 和 MySQL。与提到的其他系统相比,launchd 配置文件相当复杂和麻烦。然而,systemd 单元文件与脚本具有相同的简单性run

在万维网上可以找到相当多的自制mysqld.service和服务单元,在不同的人收集的自制方便的 systemd 服务单元中。httpd.service

所有这些都提供了在引导程序中启动守护进程、在系统运行时在管理员/自动控制下停止和启动守护进程以及在各种故障情况下自动重新启动守护进程的基本基础。 Xion345 错误地将其与 monit 混为一谈。正如您在 xyr 答案中看到的,用于监视和控制的底层是 daemon System 5 rc。它同样可以是 systemd 或 nosh。 (事实上​​,如果 Xion345 的示例使用该service命令而不是尝试直接运行 init.d 脚本(出于这个原因和其他几个原因,这不是一个好主意),那么它在 systemd、upstart、或开胃菜。)

monit 所属的地方是在上面的层中。监控用途启动/停止/监控基板和监视器实际提供的服务,哪一个做此外使用守护进程监督者来监督守护进程。在这一层中可以找到相关工具,例如 nagios。 (人们可以相当轻松地将 nagios 插入到 daemontools 系列监控的守护进程中,并让它通过 daemontools API 检查进程状态和正常运行时间。我的 nosh 工具集甚至附带了一个基本的 nagios 插件来执行此操作。)

答案3

除了 Chris Down 写的之外,我还推荐监控。它尤其可以检查端口是否打开(例如80),如果该端口关闭则重新启动相应的服务(例如httpd)。看这个例子对于 sshd :

check process sshd with pidfile /var/run/sshd.pid
start program  "/etc/init.d/sshd start"
stop program  "/etc/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

Monit 使用与 perp 或 daemontools 不同的方法:它不仅确保进程正在运行,而且检查端口是否打开或文件是否存在(可能是 UNIX 套接字)。与 daemontools 或 perp 相比,它可能更容易设置,并且侵入性更小(您不必确保 monit 与您的 init 系统正确交互)。如果它经常无法重新启动服务,还可以将其配置为发送电子邮件。

答案4

还有上帝

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

保持服务器进程和任务运行应该是部署过程的一个简单部分。 God 的目标是成为最简单、最强大的监控应用程序。

编写一个简单的服务器simple.rb

loop do
  puts 'Hello'
  sleep 1
end

现在创建一个脚本simple.god来监视守护进程:

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive
end

现在启动监控脚本:

god -c path/to/simple.god -D

上帝不仅仅可以监视 Ruby 应用程序,它还可以监视您的httpdmysqld/etc/init./d/...根据需要调用相应的脚本。

相关内容