Monit配置:如何实现仅进程存在时检测内存超阈值终止进程
Monit 通用检测规则配置方案
问题原因
if exists AND 内存阈值判断触发语法错误的核心原因:Monit进程检测规则中,进程存在性是独立检测分支,不支持和内存、CPU这类资源占用条件做AND逻辑拼接。实际上资源占用检测逻辑本身仅在进程存活时执行,进程不存在时资源检测分支会自动跳过,不需要额外追加存在判断。
未运行someprocess的主机持续输出"process is not running"日志,是Monit针对不存在进程检查项的默认日志行为,单独配置进程不存在时的处理动作即可解决。
正确可用的配置规则
check process someprocess matching "someprocess" # 进程不存在时不触发告警、不输出进程不存在的提示日志 if does not exist then noalert # 内存占用超阈值时终止进程 if memory usage > 2% for 1 cycle then exec "/usr/bin/pkill -f someprocess"
配置说明
- 规则完全兼容两类主机:没运行someprocess的主机会直接跳过资源检测,不会刷无关日志;运行了someprocess的主机会正常执行内存阈值检测,超限时自动执行杀进程逻辑
- 原规则里的
/usr/bin/kill someprocess是无效命令:kill命令仅接收PID作为参数,无法直接识别进程名,替换为pkill -f才能正确匹配进程名发送终止信号,如果需要强制终止可以改成/usr/bin/pkill -9 -f someprocess - 配置修改完成后,先执行
monit -t做语法校验,确认无报错后重载Monit服务即可生效
内容的提问来源于stack exchange,提问作者NeverABreak
相关产品推荐
相关产品推荐

