[ 'host' => env('CRONTAB_REDIS_HOST', '127.0.0.1'), 'port' => (int)env('CRONTAB_REDIS_PORT', 6379), 'auth' => env('CRONTAB_REDIS_AUTH', ''), 'prefix' => env('CRONTAB_REDIS_PREFIX', ''), 'databases' => (int)env('CRONTAB_REDIS_DB', 0), 'timeout' => (int)env('CRONTAB_REDIS_TIMEOUT', 30), ], // 调度器配置 'scheduler' => [ // 调度器 tick 间隔 (秒,支持小数;毫秒级任务建议 0.05~0.1) 'tick_interval' => (float)env('CRONTAB_TICK_INTERVAL', 0.1), // 任务执行超时时间 (秒) 'task_timeout' => (int)env('CRONTAB_TASK_TIMEOUT', 300), // 主锁 TTL (秒) 'lock_ttl' => (int)env('CRONTAB_LOCK_TTL', 60), // 主锁续期间隔 (秒) 'lock_renew_interval' => (int)env('CRONTAB_LOCK_RENEW_INTERVAL', 15), // 是否启用协程并发执行多个到期任务 'concurrent_tasks' => (bool)env('CRONTAB_CONCURRENT', true), // 并发任务最大数量 'max_concurrent' => (int)env('CRONTAB_MAX_CONCURRENT', 10), // PID 文件路径 (独立模式) 'pid_file' => env('CRONTAB_PID_FILE', ''), // 日志文件路径 (独立模式) 'log_file' => env('CRONTAB_LOG_FILE', ''), ], // 注册的任务列表 (配置模式,expression 字符串格式) // 注解模式通过 #[Crontab] 在 handle() 方法上声明,kiri-core Scanner 自动发现 // 表达式: every:100ms | every:60 | every:5m | every:1h | daily:03:00 | hourly:30 | cron:*\/5 * * * * | at:时间戳 // 每个任务需实现 TaskInterface 接口 'tasks' => [ // 示例: // [ // 'class' => App\Task\CleanLogTask::class, // 'name' => '清理日志', // 'expression' => 'daily:03:00', // 每天 03:00 // ], // [ // 'class' => App\Task\HeartbeatTask::class, // 'name' => '心跳检测', // 'expression' => 'every:60', // 每 60 秒 // ], ], ];