ساخت یک فرآیند دیمون
- محمد علایی
- منتشر شده در
- زمان خواندن 2 دقیقه
مقدمه
ساخت یک برنامه دیمون به معنای ایجاد یک پردازش بلندمدت (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` جوملا قرار داده شود.