Chr*_*s P 0 scheduler scheduled-tasks laravel
我是laravel的新手。
我正在寻找如何执行计划。调度参数(频率、命令)存储在一个 mysql 表中。
我想到了一个解决方案:使用 file_put_contents 在 app/Console/Kernel 中写入。
欢迎任何更好的想法。
提前致谢,克里斯帕帕斯
某个命令的频率是在多个级别上定义的。服务器上的Cron 条目每分钟调用一次调度程序。在您的调度程序中也有频率选项。
让存储在数据库中的参数定义命令执行频率的一种可能性是向表中添加一个已执行的字段并将本地范围添加到您的命令模型中,以验证您的 mysql 表中的调度参数:
public function scopeReadyToExecute($query)
{
return $query->where('executed_at', '<=', Carbon::now()->subMinutes(5)->toDateTimeString());
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中频率是 5 分钟,当然你必须根据频率字段中的值更改这个值。
现在,您可以例如在 Kernel.php 中定义 master:command 每分钟执行一次:
$schedule->command('master:command')->everyMinute()
Run Code Online (Sandbox Code Playgroud)
在 master:command 的句柄中,您调用 scope 函数来获取准备执行的命令:
public function handle()
{
$commands = Command::readyToExecute()->get();
foreach ($commands as $command) {
$this->call($command->name)
}
}
Run Code Online (Sandbox Code Playgroud)
根据表中定义的参数准备好执行的每个命令都将被执行。
祝你好运!
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |