【发布时间】:2021-07-28 03:38:09
【问题描述】:
所以我想完成一个命令,该命令每周日运行一次,但在该周日每 7 秒运行一次。
以下内容来自文档,但我不知道如何实现这一点。谁能指引我正确的方向?
protected function schedule(Schedule $schedule)
{
$schedule->command('test:cron')
->everyMinute();
}
【问题讨论】:
所以我想完成一个命令,该命令每周日运行一次,但在该周日每 7 秒运行一次。
以下内容来自文档,但我不知道如何实现这一点。谁能指引我正确的方向?
protected function schedule(Schedule $schedule)
{
$schedule->command('test:cron')
->everyMinute();
}
【问题讨论】:
这将在星期日每分钟运行一次命令:
protected function schedule(Schedule $schedule)
{
$schedule->command('test:cron')->cron('* * * * SUN');
}
查看here
PS:我认为你不能使用 cron 来低于“每分钟”。
【讨论】:
我相信您无法通过调度程序 API 实现这一点。 但是,您可以像这样在星期天每分钟运行一次自定义命令/作业:
protected function schedule(Schedule $schedule)
{
$schedule->job(new Job)
->sundays()
->everyMinutes();
}
然后在您的工作中,调用您需要运行的 CLI 命令,休眠 7 秒,然后重复此过程 1 分钟。 最后,请务必查看有关 Jobs 的 Laravel 文档:https://laravel.com/docs/8.x/queues 例如,使用 symfony/process :
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Symfony\Component\Process\Process;
class RunCommand implements ShouldQueue, ShouldBeUnique
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct()
{
//
}
public function handle()
{
$process = new Process(['ls', '-lsa']);
for ($i = 1; $i < 8; $i++) {
// Run the command
$process->run();
// Pause the execution during 7 seconds
sleep(7);
}
}
}
【讨论】: