Monit配置监控PHP-FPM Unix套接字文件时出现语法错误的问题排查
Monit配置监控PHP-FPM Unix套接字文件时出现语法错误的问题排查
嘿,我来帮你搞定这个问题!你碰到的syntax error ‘unixsocket’报错,核心原因其实很简单——你把Unix套接字的检查逻辑放在了check file块里,但Monit的check file仅支持文件相关的测试(比如存在性、权限、大小等),unixsocket属于进程或套接字连接性测试,根本不能在check file的上下文里用。
正确的配置写法
你需要用check process来监控PHP-FPM进程(同时关联pid文件),然后在这个进程检查块里添加Unix套接字的可用性测试。这样既能监控进程状态,又能同时检查各个域名对应的套接字是否正常。
给你一个修正后的完整配置示例:
check process php7.3-fpm with pidfile /var/run/php/php7.3-fpm.pid start program = "/usr/sbin/service php7.3-fpm start" with timeout 60 seconds stop program = "/usr/sbin/service php7.3-fpm stop" if does not exist then restart if failed unixsocket /run/php/php7.3-fpm-domain.co.uk.sock then restart if failed unixsocket /run/php/php7.3-fpm-domain2.co.uk.sock then restart if failed unixsocket /run/php/php7.3-fpm-domain3.co.uk.sock then restart
额外验证小步骤
虽然你用的Monit 5.31.0确实支持unixsocket选项,但可以顺手确认下你的Monit版本是否编译了Unix套接字支持:
运行命令:
monit -V
查看输出里有没有+Unix sockets的标识,有就说明没问题;如果没有,可能需要重新编译Monit并开启这个功能。
补充说明
如果你只想单独监控某个Unix套接字文件的可用性,也可以用check unixsocket块,比如:
check unixsocket php7.3-fpm-domain-sock with path /run/php/php7.3-fpm-domain.co.uk.sock if failed connection then restart program = "/usr/sbin/service php7.3-fpm start" with timeout 60 seconds
但结合你的需求(监控PHP-FPM进程+多个套接字),用check process的方式更简洁统一。
备注:内容来源于stack exchange,提问作者Andrew Newby
相关产品推荐
相关产品推荐

