lavarel中坑系列之倔强的withoutOverlapping

      昨天是要发版了,测试的过程中,数据库time out了,很奇怪的是别的都可以正常连接测试数据库,就是测试服务器ping不同,因为时间紧急,然后启动计划plan B。紧急切换数据库。一切看似正常,但是到Task Schedule ,定时任务的时候,有的进程正常运作,有个进程就是不跑。然后小编就开始各种查日志,一切都正常啊。然后灵机一动,手动执行一遍,发现一切正常,可是,这到底是为什么??????

   然后就是上google各种查资料,后来才找到定位,原来是在Kernel文件配置定时任务的时候,使用这个命令                               

$schedule->command('emails:send')->withoutOverlapping();

      关于这个命令,官方文档给出的解释是:

In this example, the emails:send Artisan command will be run every minute if it is not already running. The withoutOverlapping method is especially useful if you have tasks that vary drastically in their execution time, preventing you from predicting exactly how long a given task will take.

      说成大白话就是,如果一个进程跑一个命令,当数据量大的时候,一次跑不完,然后新的进程有开启,这样会导致有些数据会被重复修改。而这个命令的作用就是当一个进程还没跑完,不会开启新的进程。其机制就是开启明亮的时候会在项目的storage/framework/cache目录中添加一个文件,如果进程卡住或者未进行完成的时候,这个文件就会陷入死循环,一直执行该进程,等到进程执行完毕之后,会删除相对应的缓存文件,开始下一个进程。

    

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值