Skip to content

スケジュールタスク

Doggy はカスタム TaskScheduler + Symfony Messenger に基づいたスケジュールタスクシステムを内蔵し、分散実行と複数タイプのタスクをサポートします。

概要

スケジュールタスクシステムは src/Service/Task/ にあります:

src/Service/Task/
├── TaskHandlerInterface.php   # 任务处理器接口
├── TaskHandlerLocator.php     # 处理器定位器
└── TaskScheduler.php          # 调度器

関連エンティティは src/Entity/System/:

エンティティ説明
Task.phpタスク定義(Cron、ハンドラー、パラメータ)
TaskLog.phpタスク実行ログ

スケジュールタスクの作成

1. タスクハンドラーの実装

php
namespace App\Task;

use App\Service\Task\TaskHandlerInterface;

class ActivateAccountByHireDateTask implements TaskHandlerInterface
{
    public function handle(array $params = []): void
    {
        // 执行业务逻辑
    }
}

既存タスクの例: src/Task/ActivateAccountByHireDateTask.php

2. タスクの登録

データベースまたはコマンドで登録します:

bash
php bin/console app:run-scheduler

スケジュール実行

TaskScheduler の実装メカニズム:

  • データベースから Task 設定を読み込み
  • Cron 式を解析
  • TaskHandlerLocator でハンドラーを特定
  • Symfony Messenger で非同期実行(RunTaskMessage + RunTaskMessageHandler
  • 実行結果を TaskLog に記録

メッセージアーキテクチャ

TaskScheduler → 发送 RunTaskMessage

Messenger (Doctrine Transport)

RunTaskMessageHandler → TaskHandlerInterface::handle()

TaskLog 记录执行结果

管理画面

入口: App\Controller\Admin\TaskController

テンプレート: templates/admin/task/index.html.twig

  • タスク一覧の閲覧
  • 実行ログの閲覧
  • 手動トリガー実行

機能

  • Cron 式によるスケジュール
  • 非同期実行(Messenger メッセージキュー)
  • 実行状態の追跡(TaskLog)
  • 失敗時のリトライメカニズム
  • 拡張可能なハンドラーインターフェース

MIT ライセンスでオープンソース | Copyright © 2026 Doggy