开启了自定义进程process, 使用laravels stop命令不能关闭服务器
lwhdev opened this issue · comments
goper commented
+--------------------------+---------+
| PHP | 7.3.21 |
| Swoole | 4.8.1 |
| LaravelS | - |
| Laravel Framework [test] | 7.30.6 |
我这里发现使用了 php bin/laravels stop 只能干掉worker进程, 然后里面的自定义进程一直卡在那里,导致laravels主进程停止不了,不知道为什么,是否需要手动释放自定义的process , 但是timer 却可以自动释放
我的自定义进程代码如下
class TestProcess implements CustomProcessInterface
{
/**
* @var bool 退出标记,用于Reload更新
*/
private static $quit = false;
public static function callback(Server $swoole, Process $process)
{
while ($data = $process->read()) {
$process->write('TestProcess: ' . $data); //响应
$count = 1;
while ($count<=1000){
$count++;
DB::disconnect(); // 关闭数据库连接
Redis::connection()->close();
}
\Log::info(__METHOD__, ['close mysql and redis: read data: ',$data,$count,time()]) ;
}
}
// 要求:LaravelS >= v3.4.0 并且 callback() 必须是异步非阻塞程序。
public static function onReload(Server $swoole, Process $process)
{
\Log::info('Test process: reloading');
self::$quit = true;
// $process->exit(0); // 强制退出进程
}
// 要求:LaravelS >= v3.7.4 并且 callback() 必须是异步非阻塞程序。
public static function onStop(Server $swoole, Process $process)
{
\Log::info('Test process: stopping');
self::$quit = true;
}
}
,是不是自定进程一直运行,停止不了,请大佬指教@hhxsv5
Biao Xie commented
要把self::$quit用在callback()的循环判断里面,不然一直循环啊
goper commented
大意了.谢谢大佬