如何实现亚分钟频率的 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);
}
你好,我知道 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);
}