如何设置对我的系统服务的监控?要么使用自动脚本,每时每刻进行扫描,无论是否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
答案2
正如其他答案中提到的,丹·伯恩斯坦的守护进程工具开始了一系列共享相同原始机制的工具集:
在几乎所有这些中,人们编写一个run
运行/作为守护进程的程序,服务管理器或主管进程只是使用正常的 Unix 和 Linux 机制将其作为分叉子进程进行监视。对于 Apache 和 MySQL,您正踏入一个很多的人以前踩过,并且有很多关于如何在 daemontools-family 服务管理下运行这些服务器的示例。这里仅列出一些:
- 凯文·J·德格拉夫。 使用 daemontools 进行服务监控。
- 阿帕奇httpd。 daemontools 服务示例。胶水逻辑。 2004年。
- daemontools下的MySQL 2011 年 10 月。
- daemontools下的Apache。 2011 年 9 月。
- 格里特·帕普. “阿帕奇”。运行脚本的集合。
- 格里特·帕普. “mysql”。运行脚本的集合。
Chris Down 认为较大的工具集可能不合适。事实并非如此。虽然所有这些工具集都是连贯且自洽的,但它们都不要求人们使用除任何特定情况下所需的工具之外的任何工具。也可以混合搭配。人们可以使用 Laurent Bercot 的execlineb
及其在 perp 下的所有实用程序,或者我的nosh
脚本解释器及其在 runit 下的所有实用程序;就像人们可以chpst
在我的service-manager
.
同样,您可以从 systemd(如果您仅使用 Linux)或 launchd(如果您使用 MacOS 10)运行 Apache 和 MySQL。与提到的其他系统相比,launchd 配置文件相当复杂和麻烦。然而,systemd 单元文件与脚本具有相同的简单性run
:
- 乔纳森·德博因·波拉德 (2014)。并排查看运行脚本和服务单元。。经常给出的答案。
在万维网上可以找到相当多的自制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 应用程序,它还可以监视您的httpd
或mysqld
并/etc/init./d/...
根据需要调用相应的脚本。