supervisor日志排查需分五步:一查主进程日志路径并tail跟踪;二查thinkphp子进程stdout/stderr配置文件路径;三用supervisorctl tail实时获取输出;四验证配置加载与supervisord启动参数;五检查日志目录权限、属主及磁盘空间。

如果您在使用ThinkPHP部署应用时配置了Supervisor来守护相关进程,但发现进程异常退出或行为不符合预期,则需要查看Supervisor自身的日志以定位问题。以下是获取和分析Supervisor日志的多种方法:
一、查看Supervisor主进程日志文件
Supervisor默认会将自身运行状态、子进程启停事件、错误信息等记录到指定的日志文件中。该日志由Supervisor主进程(supervisord)生成,不依赖于被托管的ThinkPHP应用日志。
1、确认Supervisor配置中logfile参数的路径。通常位于/etc/supervisor/conf.d/your-app.conf或/etc/supervisord.conf中,查找类似logfile=/var/log/supervisor/supervisord.log的行。
2、使用cat命令直接输出日志内容:cat /var/log/supervisor/supervisord.log。
3、若日志较大,可使用tail -n 100查看最新100行:tail -n 100 /var/log/supervisor/supervisord.log。
4、实时跟踪日志更新,执行:tail -f /var/log/supervisor/supervisord.log。
二、查看被托管ThinkPHP进程的stdout/stderr日志
Supervisor允许为每个program单独配置标准输出和标准错误的重定向路径。这些日志通常包含ThinkPHP应用启动失败、PHP致命错误、未捕获异常等关键信息,是排查应用层问题的第一手资料。
1、打开对应program的配置文件,例如/etc/supervisor/conf.d/thinkphp-worker.conf。
2、查找stdout_logfile和stderr_logfile两项配置值,如stdout_logfile=/var/log/supervisor/thinkphp-worker-stdout.log。
3、检查该路径是否存在且有读取权限:ls -l /var/log/supervisor/thinkphp-worker-stdout.log。
4、使用less或tail读取内容:tail -n 50 /var/log/supervisor/thinkphp-worker-stdout.log。
5、若配置中使用stdout_logfile=/dev/stdout,则需通过supervisorctl tail命令获取,见方法三。
三、使用supervisorctl命令实时查看进程输出
supervisorctl是Supervisor提供的交互式控制终端,支持在不依赖文件系统权限的情况下动态获取进程当前的标准输出与错误流,适用于容器化环境或日志路径不可写场景。
1、确保supervisorctl能连接到supervisord服务,运行supervisorctl status确认服务运行正常且目标program状态可见。
2、查看指定program的最近1000字节stdout内容:supervisorctl tail thinkphp-worker stdout。
3、查看stderr内容:supervisorctl tail thinkphp-worker stderr。
4、持续监控输出流:supervisorctl tail -f thinkphp-worker stdout。
注意:必须确保program配置中启用了redirect_stderr=true,否则stderr不会被捕获;若未启用,仅stdout可被tail命令访问。
四、检查Supervisor配置加载与重载状态
Supervisor日志缺失或内容为空,常因配置未正确加载、日志路径权限不足或supervisord未重启所致。此步骤用于验证日志机制是否处于激活状态。
1、运行supervisorctl reread重新扫描配置文件变更。
2、执行supervisorctl update重新加载已变更的program配置。
3、检查supervisord是否真正读取了日志路径配置:supervisorctl show thinkphp-worker | grep logfile。
4、确认supervisord进程启动时使用的配置文件路径:ps aux | grep supervisord | grep -v grep,观察是否含-c /etc/supervisord.conf等参数。
若supervisord启动时未指定-c参数,将使用默认路径/etc/supervisord.conf;此时修改/etc/supervisor/conf.d/下的文件可能无效。
五、验证日志目录权限与磁盘空间
即使配置正确,Supervisor仍可能因系统级限制无法写入日志文件,导致日志空白或报错“Permission denied”、“No space left on device”等。
1、检查日志所在目录的属主与权限:ls -ld /var/log/supervisor/,确认目录归属为root:supervisor或root:adm且至少具有drwxr-xr-x权限。
2、验证supervisord进程实际运行用户:ps -eo pid,user,comm | grep supervisord,若为root则需确保目录对root可写;若为普通用户(如www-data),则需chown匹配。
3、检查磁盘剩余空间:df -h /var/log,若使用率100%,日志写入将失败。
4、手动测试写入权限:sudo -u root touch /var/log/supervisor/test.log && rm /var/log/supervisor/test.log。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











