你好,我知道工匠调度程序是由cron调用的,并且crontab中的最小频率是“每分钟”如何以亚分钟频率实现Artisan/cron操作?
如何获得更高的频率? 我可以通过软件(PHP)来实现它:就像脚本每分钟被调用一次,但脚本本身会定时其他子操作? 或更好我可以通过bash脚本实现它(也许总是通过cron调用...但会管理每分钟内多次调用,与进程监视/垃圾回收)
我敢打赌,已经有东西实现了服务器端例程频率高于60" 。 你知道任何真正的工作示例/实施,将实现我的问题的呢?
感谢
你好,我知道工匠调度程序是由cron调用的,并且crontab中的最小频率是“每分钟”如何以亚分钟频率实现Artisan/cron操作?
如何获得更高的频率? 我可以通过软件(PHP)来实现它:就像脚本每分钟被调用一次,但脚本本身会定时其他子操作? 或更好我可以通过bash脚本实现它(也许总是通过cron调用...但会管理每分钟内多次调用,与进程监视/垃圾回收)
我敢打赌,已经有东西实现了服务器端例程频率高于60" 。 你知道任何真正的工作示例/实施,将实现我的问题的呢?
感谢
这假定操作不密集,他们会不起飞任何真正的时间量,否则你的cron作业将重叠一个nd你会恨自己
$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);
}
为什么不问你面临的真正问题而不是你在这里写的内容?没有代码或实质性问题,我们可以抛出意见和猜测 - 这不是解决真正问题所需要的。 – Mjh
是的,也许这个问题留下了太多的解释......我不认为我实际上需要一个意见,但一个工作示例的经验,没有性能缺陷... – koalaok
我喜欢实现守护进程的想法,你会如何去做? (在PHP/laravel的风格:-)) – koalaok