可通过supervisor、systemd、pid文件检测、pgrep命令及/proc/pid目录五种方法监控thinkphp常驻进程存活状态:supervisor提供自动重启与状态查询;systemd支持服务化管理与精确状态轮询;pid文件结合posix_kill实现内核级信号检测;pgrep通过进程名模糊匹配快速核查;/proc/pid目录存在性验证为最底层可靠判定依据。

如果您部署的ThinkPHP应用以常驻进程方式运行(如使用php think run启动),但无法确认其是否持续存活,则可能是由于进程意外退出、内存溢出或系统资源回收所致。以下是监控ThinkPHP进程存活状态的多种方法:
一、使用Supervisor进程守护与状态检查
Supervisor是专为长期运行进程设计的守护工具,可自动重启崩溃进程,并提供标准化状态查询接口。它通过配置文件管理ThinkPHP启动命令,确保进程始终处于运行态。
1、安装Supervisor:sudo apt install supervisor(Ubuntu)或sudo yum install epel-release && sudo yum install supervisor(CentOS)。
2、创建配置文件:sudo nano /etc/supervisor/conf.d/thinkphp.conf,写入以下内容:
3、配置项中需明确指定command(如/usr/bin/php /var/www/project/think run)、directory(项目根目录)、autostart=true、autorestart=unexpected及日志路径。
4、重载配置并启动:sudo supervisorctl reread、sudo supervisorctl update、sudo supervisorctl start thinkphp。
5、实时查看存活状态:sudo supervisorctl status thinkphp,输出中RUNNING表示存活,STOPPED或STARTING表示异常。
二、基于systemd服务化管理与状态轮询
systemd是Linux系统原生服务管理器,支持进程生命周期控制、依赖关系定义和状态持久化。将ThinkPHP注册为systemd服务后,可通过标准命令精确判断其当前运行状态。
1、创建服务文件:sudo nano /etc/systemd/system/thinkphp.service。
2、在文件中写入[Unit]段声明描述与启动依赖,[Service]段设置Type=simple、User=www-data、WorkingDirectory=/var/www/project、ExecStart=/usr/bin/php /var/www/project/think run、Restart=always、RestartSec=5。
3、重载服务配置:sudo systemctl daemon-reload。
4、启用开机自启:sudo systemctl enable thinkphp。
5、检查当前存活状态:sudo systemctl is-active thinkphp返回active即为存活;sudo systemctl status thinkphp --no-pager -n 3可查看最近三行日志与进程PID。
三、通过PID文件与POSIX信号检测进程实体
该方法不依赖外部守护工具,直接验证操作系统内核中对应PID的进程是否存在。利用posix_kill($pid, 0)发送空信号进行安全探测,不中断进程运行,适用于已知PID来源的场景。
1、确保ThinkPHP启动时写入PID文件,例如在启动脚本中添加:echo $! > /var/run/thinkphp.pid。
2、编写PHP检测脚本check_pid.php,读取PID文件内容并转换为整型。
3、调用posix_kill((int)$pid, 0);若返回true,说明进程仍在内核中运行;若抛出Warning或返回false,表明进程已终止。
4、执行检测:php check_pid.php,输出<strong><font color="green">进程存活</font></strong>或<strong><font color="green">进程已退出</font></strong>。
四、使用pgrep命令匹配进程名模糊识别
pgrep通过名称匹配查找正在运行的进程,适合快速人工核查或集成进Shell监控脚本。它不依赖PID文件或服务配置,仅依据命令行参数中的关键词进行检索。
1、确认ThinkPHP进程启动时命令行包含可识别标识,例如php think run或完整路径/usr/bin/php /var/www/project/think run。
2、执行:pgrep -f "think run",若返回非空数字列表,表示至少一个匹配进程存在。
3、进一步过滤用户权限:pgrep -u www-data -f "think run",避免误匹配其他用户的同名进程。
4、在Shell脚本中组合判断:if [ -n "$(pgrep -f 'think run')" ]; then echo "<strong><font color="green">检测到ThinkPHP进程</font></strong>"; else echo "<strong><font color="green">未发现ThinkPHP进程</font></strong>"; fi。
五、读取/proc/PID目录判断内核级存在性
/proc文件系统是Linux内核提供的进程信息接口,每个运行中的进程在/proc下拥有以其PID命名的子目录。该目录存在即代表进程被内核调度,是最底层、最可靠的存活判定依据。
1、获取目标ThinkPHP进程PID,可通过ps aux | grep "think run" | grep -v grep | awk '{print $2}'提取。
2、假定获取PID为12345,执行:test -d /proc/12345 && echo "<strong><font color="green">进程在内核中活跃</font></strong>" || echo "<strong><font color="green">进程已从内核移除</font></strong>"。
3、该方法无需任何PHP扩展或额外权限,仅依赖Linux基础文件系统语义,适合作为自动化巡检的最后一道验证。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











