From 9098698f38bb811ad26c9a867cb775de7ee82663 Mon Sep 17 00:00:00 2001 From: Alexey Portnov Date: Thu, 16 Apr 2026 21:28:30 +0800 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B1=D1=80=D0=BE=D1=81=20needRestart=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20init=20=D0=B2=20AMI-=D0=B2?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Если safe.php присылает SIGUSR1 во время длительной инициализации (подключение к Bitrix24 API может занимать 10-30с), needRestart ставился в true до входа в main loop — воркер сразу завершался, не обработав ни одного события. На медленном портале это приводило к хроническому restart-циклу. Теперь restart-сигнал, полученный во время init, откладывается — воркер входит в main loop и будет корректно перезапущен при следующем сигнале. --- bin/WorkerBitrix24IntegrationAMI.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bin/WorkerBitrix24IntegrationAMI.php b/bin/WorkerBitrix24IntegrationAMI.php index 3c9fe49..d8c1cc7 100644 --- a/bin/WorkerBitrix24IntegrationAMI.php +++ b/bin/WorkerBitrix24IntegrationAMI.php @@ -109,6 +109,10 @@ public function start($argv):void $this->extensionLength = $config->getGeneralSettings('PBXInternalExtensionLength'); $this->am->addEventHandler("userevent", [$this, "callback"]); + if ($this->needRestart) { + $this->logger->writeInfo('Restart signal received during init, deferring — entering main loop.'); + $this->needRestart = false; + } $this->processState = 'idle'; while ($this->needRestart === false) { $this->processState = 'wait_ami';