如何让Monit根据Unix CPU负载阈值仅执行对应脚本?
解决Monit CPU负载阈值触发单一脚本的问题
你的问题根源在于Monit的每个if条件是独立判断的——当CPU负载超过95%时,它同时满足>50%、>75%、>95%三个条件,所以三个脚本会被同时执行。要实现“仅触发对应阈值的单个脚本”,核心是把阈值设置为互斥的区间,让每个条件只在特定范围内生效。
修改后的Monit配置
check system $HOST if cpu > 50% and cpu <= 75% then exec "/path/to/one.sh" if cpu > 75% and cpu <= 95% then exec "/path/to/two.sh" if cpu > 95% then exec "/path/to/three.sh"
配置解释
- 第一个条件:当CPU负载在50%到75%之间(不含50%,含75%)时,仅执行
one.sh - 第二个条件:当CPU负载在75%到95%之间(不含75%,含95%)时,仅执行
two.sh - 第三个条件:当CPU负载**超过95%**时,仅执行
three.sh
这样三个区间完全互斥,不会出现多个脚本同时触发的情况。
额外注意事项
- 务必给脚本使用绝对路径,避免Monit因环境变量问题找不到脚本
- 确保脚本拥有可执行权限:
chmod +x /path/to/one.sh /path/to/two.sh /path/to/three.sh - 修改配置后,需要重启Monit让配置生效:
monit reload - 如果担心同个阈值下脚本被重复触发,可以在脚本内添加锁机制(比如用
flock),避免短时间内多次执行同一脚本
内容的提问来源于stack exchange,提问作者bibio
相关产品推荐
相关产品推荐

