From 08cbb0f12e1b133fd0293c5b7f7a6e7a709dd3f6 Mon Sep 17 00:00:00 2001 From: osaajani <> Date: Fri, 18 Jul 2025 12:02:26 +0200 Subject: [PATCH] Properly handle error on stop and start daemons --- controllers/internals/Console.php | 82 +++++++++++++++---------------- daemons/AbstractDaemon.php | 28 ++++++----- 2 files changed, 56 insertions(+), 54 deletions(-) diff --git a/controllers/internals/Console.php b/controllers/internals/Console.php index 9507bd8..e9c55f9 100644 --- a/controllers/internals/Console.php +++ b/controllers/internals/Console.php @@ -14,55 +14,55 @@ namespace controllers\internals; use DateInterval; use Faker\Factory; +/** + * Class to call the console scripts. + */ +class Console extends \descartes\InternalController +{ /** - * Class to call the console scripts. + * Start launcher daemon. */ - class Console extends \descartes\InternalController + public function launcher() { - /** - * Start launcher daemon. - */ - public function launcher() - { - new \daemons\Launcher(); - } + new \daemons\Launcher(); + } - /** - * Start sender daemon. - */ - public function sender() - { - new \daemons\Sender(); - } + /** + * Start sender daemon. + */ + public function sender() + { + new \daemons\Sender(); + } - /** - * Start webhook daemon. - */ - public function webhook() - { - new \daemons\Webhook(); - } + /** + * Start webhook daemon. + */ + public function webhook() + { + new \daemons\Webhook(); + } - /** - * Start mailer daemon. - */ - public function mailer() - { - new \daemons\Mailer(); - } + /** + * Start mailer daemon. + */ + public function mailer() + { + new \daemons\Mailer(); + } - /** - * Start a phone daemon. - * - * @param $id_phone : Phone id - */ - public function phone($id_phone) - { - $bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); - $internal_phone = new \controllers\internals\Phone($bdd); + /** + * Start a phone daemon. + * + * @param $id_phone : Phone id + */ + public function phone($id_phone) + { + $bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); + $internal_phone = new \controllers\internals\Phone($bdd); - $phone = $internal_phone->get($id_phone); - if (!$phone) + $phone = $internal_phone->get($id_phone); + if (!$phone) { exit(1); } diff --git a/daemons/AbstractDaemon.php b/daemons/AbstractDaemon.php index 79b86e5..b003a50 100644 --- a/daemons/AbstractDaemon.php +++ b/daemons/AbstractDaemon.php @@ -150,12 +150,12 @@ abstract class AbstractDaemon //Write the pid of the process into a file file_put_contents($this->pid_dir . '/' . $this->name . '.pid', getmypid()); - //Really start the daemon - $this->on_start(); - - + try { + //Really start the daemon + $this->on_start(); + while ($this->is_running) { @@ -168,17 +168,19 @@ abstract class AbstractDaemon $this->logger->critical('Exception : ' . $t->getMessage() . ' in ' . $t->getFile() . ' line ' . $t->getLine()); $exit_code = $t->getCode() ?: 1; } - - //Stop the daemon - $this->on_stop(); - - //Delete pid file - if (file_exists($this->pid_dir . '/' . $this->name . '.pid')) + finally { - unlink($this->pid_dir . '/' . $this->name . '.pid'); - } + //Stop the daemon + $this->on_stop(); - exit($exit_code ?? 0); + //Delete pid file + if (file_exists($this->pid_dir . '/' . $this->name . '.pid')) + { + unlink($this->pid_dir . '/' . $this->name . '.pid'); + } + + exit($exit_code ?? 0); + } } /**