Workerman是PHP领域常用的常驻进程开发框架,广泛应用于即时通讯、消息队列、定时任务等场景,但进程运行中可能因异常、内存溢出等问题意外退出,需要可靠的进程管理工具保障服务持续可用,Supervisor就是这类场景下的常用解决方案。

Supervisor与Workerman基础介绍
Supervisor是用Python开发的进程管理系统,能够监控和管理类Unix系统上的进程,当被管理的进程意外退出时,会自动将其重启,同时支持进程状态查看、日志管理等功能。
Workerman是PHP编写的异步、多进程、高性能的网络通信框架,默认以多进程模式运行,主进程负责管理子进程,子进程处理具体业务逻辑,但主进程如果异常退出,整个服务就会停止。
环境准备与软件安装
安装Supervisor
在Ubuntu或Debian系统中,可直接使用apt包管理器安装:
# 更新软件源 sudo apt update # 安装Supervisor sudo apt install supervisor -y # 启动Supervisor服务并设置开机自启 sudo systemctl start supervisor sudo systemctl enable supervisor
在CentOS系统中,可使用yum安装:
# 安装Supervisor sudo yum install supervisor -y # 启动服务并设置开机自启 sudo systemctl start supervisord sudo systemctl enable supervisord
准备Workerman项目
假设已经有一个部署好的Workerman项目,项目路径为/home/www/workerman_app,启动脚本为项目根目录下的start.php,启动命令为php start.php start -d,该命令会以守护进程模式启动Workerman。
编写Supervisor管理Workerman的配置文件
Supervisor的配置文件默认存放在/etc/supervisor/conf.d/目录下,每个进程组对应一个配置文件,我们新建workerman.conf文件:
[program:workerman] # Workerman启动命令,注意要写绝对路径 command=php /home/www/workerman_app/start.php start -d # 进程目录,设置为项目根目录 directory=/home/www/workerman_app # 以哪个用户运行进程,避免权限问题 user=www # 自动启动 autostart=true # 程序退出后自动重启 autorestart=true # 重启尝试次数,默认无限次 startretries=3 # 进程标准输出日志路径 stdout_logfile=/home/www/workerman_app/runtime/supervisor_stdout.log # 进程错误输出日志路径 stderr_logfile=/home/www/workerman_app/runtime/supervisor_stderr.log # 日志文件大小限制,超过后自动切割 stdout_logfile_maxbytes=50MB stderr_logfile_maxbytes=50MB # 日志文件保留数量 stdout_logfile_backups=10 stderr_logfile_backups=10 # 进程启动等待时间,确保Workerman完全启动 startsecs=5 # 停止进程的超时时间,超过该时间强制杀死进程 stopwaitsecs=10 # 停止进程的信号,Workerman支持SIGINT信号优雅停止 stopsignal=INT
配置文件中的关键参数说明:
autorestart设置为true时,只要进程退出码不是预期的正常退出码,Supervisor就会尝试重启进程startsecs表示进程启动后持续运行该时间则认为启动成功,避免启动失败被误判为成功stopsignal选择Workerman支持的停止信号,避免强制杀死进程导致业务数据丢失
加载配置并启动进程管理
配置文件编写完成后,需要让Supervisor加载新配置:
# 重新加载Supervisor配置 sudo supervisorctl reread # 更新配置,启动新的进程组 sudo supervisorctl update
之后可以通过以下命令查看Workerman进程的运行状态:
# 查看所有管理的进程状态 sudo supervisorctl status
如果配置正确,会看到类似如下的输出:
workerman RUNNING pid 1234, uptime 0:01:23
进程监控与自动重启验证
查看进程状态
除了status命令,还可以通过以下命令管理进程:
# 停止workerman进程 sudo supervisorctl stop workerman # 启动workerman进程 sudo supervisorctl start workerman # 重启workerman进程 sudo supervisorctl restart workerman
验证自动重启功能
可以手动杀死Workerman的主进程,验证Supervisor是否会自动重启:
# 查看Workerman主进程pid ps aux | grep start.php # 杀死主进程,假设pid为1234 kill -9 1234 # 等待几秒后查看进程状态 sudo supervisorctl status
此时会发现workerman进程的状态会短暂变为BACKOFF或STARTING,之后重新变为RUNNING,说明自动重启功能生效。
常见问题与解决思路
进程启动后立即退出
这种情况通常是启动命令错误或者权限不足导致的,可以查看stderr_logfile配置的日志文件,排查具体错误原因,比如PHP路径不正确、项目目录没有访问权限等。
自动重启不生效
首先检查autorestart是否设置为true,其次确认startsecs设置是否合理,如果进程启动后很快退出,可能还没到startsecs的时间就被判定为启动失败,不会触发重启。
日志文件不生成
确保配置的日志目录存在且运行Supervisor的用户有写入权限,比如上面的/home/www/workerman_app/runtime/目录需要给www用户赋予写权限。
总结
通过Supervisor管理Workerman进程,能够有效解决进程意外退出导致的服务不可用问题,减少人工运维的成本。核心步骤是正确安装Supervisor、编写适配Workerman运行特性的配置文件、验证自动重启功能是否正常。实际使用中还可以结合日志监控、告警系统,进一步提升服务的可靠性。
SupervisorWorkerman进程监控自动重启修改时间:2026-07-09 11:24:14