监控守护进程被终止时,重新启动 Apache 或 lighttpd 网络服务器
当您无法监控服务器的服务可用性时,最好借助自动监控和重启实用程序。过去 4 天,我因为度假而没有使用服务器。在此期间,由于负载过大,我的 lighttpd 网络服务器死机了,但它在 2 分钟内自动重启。我配置了一个用于监控 Linux 系统上的服务的实用程序,名为 monit。它提供了系统监控所需的所有功能,并为类 UNIX 系统执行错误恢复。
在使用 monit 之前,我有自己的 shell 和 perl 脚本来监控服务。如果服务失败,脚本将尝试重新启动服务并向我发送自动电子邮件。然而 monit 是一个更好的解决方案。
monit 是一个用于管理和监控 Unix 系统上的进程、文件、目录和设备的实用程序。Monit 会自动进行维护和修复,并可以在出现错误的情况下执行有意义的因果操作。例如,如果进程未运行,monit 可以启动该进程;如果进程没有响应,monit 可以重新启动该进程;如果进程占用过多资源,monit 可以停止该进程。您可以使用 monit 来监控文件、目录和设备的更改,例如时间戳更改、校验和更改或大小更改。
您还可以使用 monit 来监控本地主机上的文件、目录和设备。Monit 可以监控这些项目的变化,例如时间戳变化、校验和变化或大小变化。出于安全原因,这很有用,您可以监控不应更改的文件的 md5 校验和。
就我个人而言,我总是在我控制的所有盒子上安装和配置 monit。
在 Debian 或 Ubuntu Linux 下安装 monit
使用 apt-get 命令安装 monit
# apt-get install monit
或者$ sudo apt-get install monit
Red Hat enterprise Linux / CentOS Linux下安装monit(源码安装)
许多发行版都包含 monit。但是 monit 不包含在官方 Red Hat Enterprise Linux 中。只需使用 wget 命令从官方网站下载 monit 源代码:Untar monit
# cd /opt
# wget http://www.tildeslash.com/monit/dist/monit-4.8.2.tar.gz
# tar -zxvf monit-4.8.2.tar.gz
# cd monit-4.8.2
配置并编译monit:
# ./configure
# make
安装 monit
# make install
复制 monit 配置文件:
# cp monitrc /etc/monitrc
默认情况下,monit 位于/usr/local/bin/monit
如何配置 monit?
monitrc是 monit 配置文件的名称,默认情况下位于/etc/monitrc位置。但是,每个发行版将文件放置在不同的位置:。
=> 源代码安装:/etc/monitrc
=> Debian / Unentu Linux 安装:/etc/monit/monitrc
打开 monit 配置文件并设置值如下:
# vi /etc/monitrc
a) 将其作为守护进程运行,并每隔 2 分钟检查一次服务(例如 web、mysql、sshd)
。
set daemon 120
b) 使用‘守护进程’功能设置系统日志记录:
set logfile syslog facility log_daemon
c) 设置邮件服务器名称以发送电子邮件警报
设置电子邮件格式,例如来自电子邮件
set mailserver mail.example.com
set mail-format { from: alert@example.in
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
d) 现在最重要的部分是,如果由于任何原因导致失败或被 Linux 内核杀死,请重新启动 lighttpd 或 apache web 服务器:
check process lighttpd with pidfile /var/run/lighttpd.pid
group lighttpd
start program = "/etc/init.d/lighttpd start"
stop program = "/etc/init.d/lighttpd stop"
if failed host 75.126.43.232 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout
- 使用 pidfile /var/run/lighttpd.pid 检查 lighttpd 进程:您正在指定 lighttpd pid 文件和守护进程名称
- group lighttpd:指定允许或用于启动/重启 lighttpd 的组名
- 启动程序 = “/etc/init.d/lighttpd start”:启动 lighttpd 服务器的命令
- stop program = “/etc/init.d/lighttpd stop”:停止 lighttpd 服务器的命令
- 如果失败,主机 127.0.0.1 端口 80:服务器 IP 地址和端口号(80)
- 协议 http 然后重新启动:如果上述 IP 和端口失败,则重新启动 Web 服务器
- 如果在 5 个周期内重新启动 5 次,则超时:尝试重新启动 5 次;如果 monit 无法重新启动 web 服务器 5 次;则超时以避免竞争条件。
这是我的mysql 服务器重启配置指令:
这是我的sshd 服务器配置指令:
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysqld start"
stop program = "/etc/init.d/mysqld stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
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 host 127.0.0.1 port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
这是我的Apache 服务器重启配置指令:
check process httpd with pidfile /var/run/httpd.pid
group apache
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if failed host 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout
将 IP 地址 127.0.0.1 替换为你的实际 IP 地址。如果你使用的是 Debian,只需启动 monit:
# /etc/init.d/monit start
如果您使用的是Red Hat Enterprise Linux,请从 /etc/inittab 文件启动 monit:
打开 /etc/inittab 文件:
# vi /etc/inittab
附加以下行:
mo:2345:respawn:/usr/local/bin/monit -Ic /etc/monitrc
现在开始监控:
# init -q
或者
# telinit -q
您可以从 /var/log/messages 日志文件验证 monit 是否启动:
# tail -f /var/log/messages
输出:
Nov 21 04:39:21 server monit[8759]: Starting monit daemon Nov 21 04:39:21 server monit[8759]: Monit started
如果 lighttpd 死亡了,你会在日志文件中看到如下内容:
Nov 21 04:45:13 server monit[8759]: 'lighttpd' process is not running Nov 21 04:45:13 server monit[8759]: 'lighttpd' trying to restart Nov 21 04:45:13 server monit[8759]: 'lighttpd' start: /etc/init.d/lighttpd
您可以使用 monit 来监视在本地主机上运行的守护进程或类似程序,或者从 /etc/init.d/ 位置启动的程序,例如
=> Apache Web 服务器
=> SSH 服务器
=> Postfix/Sendmail MTA
=> MySQL 等
进一步阅读
- monit 手册页
- monit 官方网站和文档