我有一些任务是周期性执行的,并且时间比较长。当我退出的时候,我希望当前任务执行完才退出
stop_timeout没效果 他执行完会开启下一个任务
namespace app\process;
use support\Db;
use Workerman\Worker;
class FooProcess
{
private bool $isExit = false;
public function onWorkerStart()
{
echo "启动".PHP_EOL;
pcntl_async_signals(true);
pcntl_signal(SIGTERM, function (){
echo "SIGTERM".PHP_EOL;
$this->isExit = true;
});
pcntl_signal(SIGINT, function (){
echo "SIGINT".PHP_EOL;
$this->isExit = true;
});
while (!$this->isExit){
$this->doJob();
!$this->isExit && sleep(10);
}
Worker::stopAll();
}
public function onWorkerReload()
{
echo "重启".PHP_EOL;
$this->isExit = true;
}
private function doJob()
{
echo "开始执行".PHP_EOL;
$i = 0;
while ($i < 10){
echo "执行中".$i.PHP_EOL;
Db::table('demo')
->selectRaw('sleep(1)')
->get();
$i++;
}
echo "执行结束".PHP_EOL;
}
}
同问:只看见reload有平滑重启,但是没看见平滑关闭。
也遇到这个需求了,同求解答。
写了一个小Demo感觉可以 但是还有点小问题 stop_timeout必须大于单个任务时间 reloadable必须为false 不支持reload
自定义指令也一样
可以看下workerman的源码,看下它注册信号的方式