真正有效的ThinkPHP监控需同时验证进程、端口、业务三层状态:用Supervisor守护进程,systemd管理服务依赖,Shell脚本三合一检测防误报,并通过Prometheus暴露指标实现根因分析。

Linux部署ThinkPHP后,光靠启动命令(如 php think run)远远不够——进程可能静默退出、内存溢出、被OOM killer干掉,或因依赖服务中断而卡死。真正有效的监控告警,必须同时确认“进程在不在”“端口通不通”“业务是否真可用”,三者缺一不可。
用Supervisor守活进程,自动拉起不掉线
Supervisor是专为常驻进程设计的守护工具,适合ThinkPHP这类长期运行的服务。它不只看进程是否存在,还能在崩溃后秒级重启,并提供统一状态接口。
- 安装后创建配置文件
/etc/supervisor/conf.d/thinkphp.conf,关键项包括:command=/usr/bin/php /var/www/myapp/think run(务必写绝对路径)autorestart=unexpected(仅非正常退出才重启)startretries=3(避免反复失败循环)stdout_logfile=/var/log/thinkphp.out.log(日志必须落盘) - 启用后执行
supervisorctl update && supervisorctl start thinkphp - 日常检查用
supervisorctl status thinkphp:显示 RUNNING 才算真正存活;若为 STARTING 或 FATAL,直接查 stdout_logfile 定位启动失败原因
用systemd做系统级服务,状态可追溯可依赖
相比Supervisor,systemd更贴近系统内核,支持开机自启、依赖管理(比如等MySQL就绪后再启ThinkPHP),且状态查询更精准。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 新建服务文件
/etc/systemd/system/thinkphp.service,重点配置:Type=simple(主进程即think run)User=www-data(避免root权限过大)Restart=on-failure(不盲目always,防止配置错误无限重启)RestartSec=10(留出资源释放时间) - 启用服务:
systemctl daemon-reload && systemctl enable --now thinkphp - 验证状态:
systemctl is-active thinkphp返回 active 即进程运行中;systemctl status thinkphp可看到PID、最近日志和启动耗时,比ps更可靠
写轻量Shell脚本,三合一验证+防误报
仅靠进程存在性检测极易误判(比如master进程还在但worker全挂了)。真实可用的脚本必须组合检查:
立即学习“PHP免费学习笔记(深入)”;
-
进程层:用
pgrep -f "php.*think run"(-f匹配完整命令行,避开grep自身进程) -
端口层:用
ss -tln | grep ":80\b"(\b确保只匹配80端口,不误判8080) -
业务层:用
curl -s --connect-timeout 3 -m 5 http://127.0.0.1/health | grep -q "ok"(健康检查接口需ThinkPHP自己提供,返回JSON{"status":"ok"}) - 三者任一失败即触发告警,但需加冷却机制:用
/tmp/thinkphp_alert_ts记录上次告警时间,15分钟内不再重复发
集成到Prometheus,把告警变成可分析的数据
如果已有Prometheus生态,建议让ThinkPHP主动暴露指标,而非被动轮询。这样既能监控进程状态,也能关联请求错误率、响应延迟等业务指标。
- 在ThinkPHP中引入
prometheus/client_php包,于入口或中间件中注册指标:$counter = $registry->getOrRegisterCounter('thinkphp_process_up', 'Process alive status');
在定时任务里每30秒调用一次$counter->set(1)(存活)或$counter->set(0)(异常) - Prometheus配置抓取该指标,Alertmanager中设规则:
expr: thinkphp_process_up == 0 for: 1m(连续1分钟为0即告警) - 优势:告警可与CPU、内存、HTTP错误率等指标联动分析,定位根因更快


















