Supervisord用来管理基于Thinkphp客户端生成的Swoole服务

使用Supervisord来管理Thinkphp生成的Swoole服务

前言

由于研发需要用到大量的后端服务,而PHP在后端服务的支撑上,存在一些天然的缺点,但是可以用第三方软件来弥补这些问题。

Supervisord

supervisord是一个进程管理工具,提供web页面管理,能对进程进行自动重启等操作。
它可以将非后台运行程序后台运行,并且自动监控,重启进程。但是不能管理后台运行程序。

宝塔面板

宝塔面板是一款服务器管理工具,适用于运维人员不足,但是对网络又有很多要求的一些公司。

Thinkphp

Thinkphp是一款MVC结构的开源PHP框架,但是也提供了对命令行(后台服务)的一些支持。

过程

在后台用thinkphp的客户端模式运行了一个swoole的服务,其中swoole服务的基本配置如下:

$config = array(
'worker_num' => 8,
'daemonize' => 1,
'max_request' => 1000,
'dispatch_mode' => 3,
'task_worker_num' => 10,
"task_ipc_mode" => 2,
"log_file" => "/var/log/swoole.log",
);

然后使用Thinkphp的命令行模式进行启动:

php think TestCommand

确定是没问题的。
然后进入宝塔面板,找到Supervisor项(在系统工具那里):
在这里插入图片描述选择添加守护进程,选择启动,这个时候,你会发现总是报错,表现为FATAL或者BACKOFF,而在系统错误日志那里,则是swoole报错:

  [Swoole\Exception]                                                             
  failed to listen server port[0.0.0.0:9505], Error: Address already in use[98]  

原因就在于swoole配置为了守护进程启动,而supervisor只适用于前台服务,导致不能发现后台进程的pid,所以不断重启swoole服务。

解决

既然supervisor已经提供了守护进程的功能,我们就关闭swoole的该选项,设置为:

$config = array(
'worker_num' => 8,
'daemonize' => 1,
'max_request' => 1000,
'dispatch_mode' => 3,
'task_worker_num' => 10,
"task_ipc_mode" => 2,
"log_file" => "/var/log/swoole.log",
);

然后再到宝塔面板后台,点击启动,就可以看到正常了:
在这里插入图片描述
在系统里通过:

ps -ef | grep testcommand

也能看到的服务:

root      395684  395648  0 17:37 ?        00:00:00 php think testcommand

接下来,我们测试一下,手动kill掉进程:

kill 395684

你会发现,supervisor会马上重启该服务。

总结

Supervisor提供了优秀的守护进程监控服务,使得我们在用脚本编写一些系统服务的时候,不用再去过多考虑服务僵死的情况,但是也要注意不要跟一些本身自带守护进程运行模式的服务冲突,比如Swoole。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值