使用POSIX正则配置monit时出现.*相关语法错误该如何解决
问题原因
你遇到的报错和.*本身无关,POSIX正则里.*的写法没有特殊要求,报错来自两个语法错误:
- POSIX字符类必须嵌套两层方括号使用,比如匹配数字要写
[[:digit:]]、匹配空白要写[[:space:]],你原配置中所有字符类都少了外层方括号,不符合语法规范。 - 正则内部的双引号没有按照monit的要求正确转义,导致配置解析失败。
解决方法
将所有POSIX字符类补充外层方括号,检查转义规则即可,修改后的完整配置如下:
check file access_log_1 with path /app/DNIF_logs/access_log_1 ignore content = ".*favicon.*" if content = "^([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}[[:space:]]((((([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3})|\-)[[:space:]]([[:digit:]]{6,7}|\-)[[:space:]][-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&=]*)[[:space:]])|)-[[:space:]]-[[:space:]]\[[[:digit:]]{2}\/([A-Z]|[a-z]){3}\/[[:digit:]]{4}\:[[:digit:]]{2}\:[[:digit:]]{2}\:[[:digit:]]{2}[[:space:]]\+[[:digit:]]{4}\][[:space:]]\"(.*)\"[[:space:]](500|502|503)([[:digit:]]|[[:space:]])*\"https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/\/=]*)\"(.*)" then alert
额外建议
- 低版本monit支持用单引号包裹正则,不需要转义内部的双引号,写法更简洁,你可以根据你的monit版本选择。
- 调试长正则时可以先拆分小段测试,确认每段没有语法错误后再拼接,更方便定位问题。
内容的提问来源于stack exchange,提问作者Akshat
相关产品推荐
相关产品推荐

