ساخت یک فرآیند دیمون

مقدمه

ساخت یک برنامه دیمون به معنای ایجاد یک پردازش بلندمدت (long-running process) است که معمولاً در پشت‌صحنه (background) اجرا می‌شود. این برنامه می‌تواند از طریق کنسول یا با استفاده از ابزارهای نظارت و کنترل فرآیند مثل `systemd` اجرا شود.

مثلاً اسکریپت دیمون شما در مسیر زیر قرار می‌گیرد:

./cli/mydaemon.php

محل قرارگیری اسکریپت

اسکریپت PHP خود را می‌توانید در زیرپوشه `cli` در شاخه اصلی جوملا بگذارید. 

مثال: 

`/var/lib/www/public_html/cli/mydaemon.php`

در کد نمونه آینده همین مسیر به عنوان مسیر پایه (Base Path) در نظر گرفته شده است.

کد نمونه

یک مثال آماده برای کپی و اجرای سریع:

 
#!/usr/bin/php
<?php
// برای تشخیص این اسکریپت به عنوان نقطه ورود جوملا، تعریف می‌شود
define('_JEXEC', 1);

// تنظیم مسیر پایه جوملا (یک فولدر بالاتر نسبت به current directory یعنی پوشه cli)
define('JPATH_BASE', dirname(__DIR__));

// بارگذاری تعاریف و چارچوب جوملا
require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';

// افزودن یک لاگر ساده که خروجی را echo می‌کند
\Joomla\CMS\Log\Log::addLogger(['logger' => 'Echo']);

/**
 * کلاس برنامه دیمون ما
 */
class MyDaemon extends \Joomla\CMS\Application\DaemonApplication
{
    // نام برنامه
    public $name = 'MyDaemon';
    
    public function __construct() {
        // بارگذاری تنظیمات از config.php
        $config = new \Joomla\Registry\Registry(new \JConfig());
        
        // تنظیم دستی فایل PID (بهتر است در config.php تنظیم شود)
        $config->set('application_pid_file', '/run/mydaemon.pid');
        
        parent::__construct(null, $config);
    }

    // متد مورد نیاز توسط اینترفیس CMSApplicationInterface  
    public function getName() {
      return $this->name;
    }

    // منطق کاری برنامه اینجا پیاده‌سازی می‌شود
    public function doExecute()
    {
        $this->out("Hello Joomla!");
    }
}

// اجرای برنامه
\Joomla\CMS\Application\DaemonApplication::getInstance('MyDaemon')->execute();

 

پارامترهای اجرای دیمون

جوملا به طور خودکار اگر گزینه -f یا همان (foreground) به برنامه داده شود، تشخیص می‌دهد و برنامه را در حالت پیش‌زمینه اجرا می‌کند و آن را دیمونایز (پس‌زمینه کردن) نمی‌کند.

برای مثال:

./cli/mydaemon.php -f

مزایای استفاده از `-f`

- ساده‌تر کردن فرآیند رفع اشکال (Debugging)

- در استفاده از نظارت‌کننده‌های وظیفه (Supervisor Daemons) امکان مانیتور مستقیم و راحت‌تر میسر می‌شود.

جمع‌بندی

- برنامه دیمون جوملا باید از کلاس `DaemonApplication` ارث‌بری کند.

- باید مسیر پایه جوملا را دقیق تنظیم کنید.

- اجرای برنامه در پس‌زمینه یا پیش‌زمینه با پارامتر `-f` کنترل می‌شود.

- در منطق برنامه در متد `doExecute()` کدهای مورد نظر خود را می‌نویسید.

- برای تنظیم pid فایل، بهتر است مقدار در `configuration.php` داده شود اما در نمونه می‌توان تنظیمات دستی هم داشت.

- اسکریپت باید در پوشه `cli` جوملا قرار داده شود.