Linux 使用 monit 监控程序运行
1. 测试环境
Ubuntu 18.04
内核:55.0.0.36-generic
2. 安装软件
apt-get install monit
该程序会开机自动运行。
该程序帮助文档:
https://mmonit.com/monit/documentation/monit.html
3. monit配置文件
vim /etc/monit/monitrc
第19行左右:
set daemon 120
这里默认是120s,表示每120秒检查一下被监视的程序状态。可以改小一点。例如,改成6啥的。
启用web服务,在第159行左右:
set httpd port 2812
use address localhost
allow localhost
allow admin:monit
至少去掉上面四行注释。这样,启动服务后,它会自动在后台运行http服务,显示各程序状态。这里是默认配置,即在浏览器打开 localhost:2812
就可以访问,而登录时,账号是admin
,密码是monit
。
4. monit服务启动与停止
每次修改完配置文件后,若要新配置生效,必须重启monit服务。
重启命令:systemctl restart monit
停止命令:systemctl stop monit
启动命令:systemctl start monit
查看当前服务状态:systemctl status monit
如果启动后,报错,提示不能启动,往往是配置文件写错了。使用查看当前服务状态命令,可以看到是哪里写错了。
注意:此服务会开机自启动。
5. 关闭或开启开机自启动
关闭开机自启动:systemctl disable monit
开启开机自启动:systemctl enable monit
注:当程序正在后台运行时,关闭开机自启动操作,并不会关闭在后台运行的那个进程。
6. 查看monit的日志
默认日志存放位置为/var/log/monit.log,此位置似乎可在上述配置文件中配置。
7. 如何监控自己的程序(当看门狗使用)
此处为示例。
需求:有一个待监视的程序,需要保证它一直在执行,不论是正常退出,还是出现segmentation fault 等情况导致退出,需要将其重启。
思路:写一个脚本,检查程序是否还在,不在就启动它。然后利用monit定时执行的功能,定时调用这个脚本进行检查即可。
(1) 待监控的程序示例
该示例程序如下:
程序名 Watched.cpp
#include <iostream>
#include <thread>
using namespace std;
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
void raiseSegmentationFault(void)
{
cout << "Segmentation Fault Exit." << endl;
int