ModStart排程和佇列

ModStart開源發表於2021-12-09

任務排程

使用Laravel的任務排程,可以實現系統計劃執行任務。

如何在模組中註冊一個任務排程

實現一個任務排程Provider

class ModuleXxxScheduleProvider extends AbstractScheduleProvider
{
    public function cron()
    {
        return $this->cronEveryMinute();
    }

    public function title()
    {
        return '測試任務排程';
    }

    public function run()
    {
        Log::info('任務已經執行');
    }

}

註冊任務排程

ScheduleProvider::register(ModuleXxxScheduleProvider::class);

開啟排程器

Cron 是 UNIX、SOLARIS、LINUX 下的一個十分有用的工具,通過 Cron 指令碼能使計劃任務定期地在系統後臺自動執行。這種計劃任務在 UNIX、SOLARIS、LINUX下術語為 Cron Jobs。

下面是你唯一需要新增到伺服器的 Cron 條目:

* * * * * php /xxx/artisan schedule:run >> /dev/null 2>&1

該 Cron 將會每分鐘呼叫一次 Laravel 命令排程器,當 schedule:run 命令執行後,ModStart 和 Laravel 評估你的排程任務並執行到期的任務。

佇列

Laravel 佇列為不同的後臺佇列服務提供了統一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基於關係型資料庫的佇列。佇列的目的是將耗時的任務延時處理,比如傳送郵件,從而大幅度縮短 Web 請求和響應的時間。

佇列配置檔案存放在 config/queue.php。每一種佇列驅動的配置都可以在該檔案中找到,包括資料庫、Beanstalkd、Amazon SQS、Redis以及同步(本地使用)驅動。其中還包含了一個 null 佇列驅動用於那些放棄佇列的任務。

開啟佇列

我們推薦您使用 Supervisor 來管理佇列程式,Supervisor 是 Linux 系統中常用的程式守護程式。如果佇列程式 queue:work 意外關閉,它會自動重啟啟動佇列程式。

Supervisor 參考配置

[program:queue-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /xxx/artisan queue:work database --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=2
redirect_stderr=true
stdout_logfile=/tmp/worker.log

在本例中,numprocs 指令讓 Supervisor 執行 2 個 queue:work 程式並監視它們,如果失敗的話自動重啟。當然,你需要修改 queue:work database 的 command 指令來對映你的佇列連線。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章