如何实现亚分钟频率的 Artisan/cron 操作?

How Realize a Artisan/cron operation with sub minute frequency?

你好,我知道 Artisan 调度程序是由 cron 调用的,crontab 中的最低频率是 "everyminute"

如何获得更高的频率? 我可以通过软件实现它(PHP):就像脚本每分钟调用一次但脚本本身会计时其他子操作? 或者更好的是,我可以通过 bash 脚本实现它(也许总是通过 cron 调用...但会在每分钟内管理多个调用,进程 watching/garbage 集合)

我敢打赌,已经有一些东西可以实现频率高于 60" 的服务器端例程。 你知道任何真正有效的 example/implementation 可以理解我的问题吗?

谢谢

这假设操作不是密集的并且它们不会占用任何实际时间,否则您的 cron 作业将重叠并且您会讨厌自己

$times_per_minute = 10;
for($i=0; $i<$times_per_minute; $i++) {
    do_my_awesome_function();
    sleep(60/$times_per_minute);
}

然后安排你的 cron 作业是每分钟 运行 上面的代码。

[编辑]

更高级的版本检查 运行 时间遮挡:

 $start_time = time(); 
 $times_per_minute = 10;
 for($i=0; $i<$times_per_minute; $i++) {
        do_my_awesome_function();
        $actual_runtime = time() - $start_time;
        $predicted_runtime = $i * (60/$times_per_minute);
        $offset_time = $predicted_runtime - $actual_runtime;
        sleep((60 - $offset_time)/$times_per_minute);
 }

一个更高级的版本可以测试看看是否有足够的时间来 运行 再次循环:

 $start_time = time(); 
 $times_per_minute = 10;
 for($i=0; $i<$times_per_minute; $i++) {
        if($i > 0) {
            $average_run_time = (time() - $start_time) / $i
            if(time() - $start_time + $average_run_time > 60) {
                break;
            }
        }
        do_my_awesome_function();
        $actual_runtime = time() - $start_time;
        $predicted_runtime = $i * (60/$times_per_minute);
        $offset_time = $predicted_runtime - $actual_runtime;
        sleep((60 - $offset_time)/$times_per_minute);
 }