当前位置: 首页 > 后端技术 > PHP

Laravel定时任务解析--事件属性

时间:2023-03-29 19:37:41 PHP

翻译GitHubhttps://github.com/yuansir/diving-laravel-zh原文链接https://divinglaravel.com/task-scheduling/properties-of-an-eventEvery您添加的条目将转换为Illuminate\Console\Scheduling\Event的实例并存储在Scheduler的$events类属性中,Event对象包含以下内容:\Event的实例并存储在$events类属性中Scheduler,Event对象包含以下内容:CommandtorunCRONExpressionTimezone用于评估时间的操作系统用户命令应运行的环境列表命令应在维护模式下运行的配置事件重叠配置命令前台/后台运行配置检查列表decideifthecommandshouldrunornotConfigurationonhowtohandletheoutputCallbackstorunafterthecommandrunsCallbackstorunbeforethecommandrunsONqueDescriptionforthecommandA为CR联通模式操作系统用于评估用户运行命令时间的时间列表命令应运行的环境维护模式配置事件重叠配置命令前台/后台运行配置用于决定命令是否运行配置的检查列表如何处理输出命令运行在回调之后运行在操作系统上运行的命令工匠命令要分派的作业回调回调在操作系统上运行的命令工匠命令要分派的作业在回调的情况下,容器:call()方法用于运行我们传递的值,这意味着我们可以传递可调用对象或字符串表示类上的方法:在回调的情况下,Container::call()方法用于运行值我们传递,这意味着我们可以传递一个可以调用或表示方法的字符串:protectedfunctionschedule(Schedule$schedule){$schedule->call(function(){DB::table('recent_users')->删除();})->daily();}或者:protectedfunctionschedule(Schedule$schedule){$schedule->call('MetricsRepository@cleanRecentUsers')->daily();}为操作系统传递一个命令如果你想传递操作系统运行的命令可以使用exec():如果要运行操作系统的命令,可以使用exec():$schedule->exec('php/home/sendmail.php--user=10--attachInvoice')->monthly();你也可以将参数作为数组传递:也可以使用数组作为参数:$schedule->exec('php/home/sendmail.php',['--user=10','--subject'=>'提醒','--attachInvoice'])->monthly();传工匠命令调用工匠命令$schedule->command('mail:send--user=10')->monthly();也可以传类名:也可以传类名$schedule->command('App\Console\Commands\EmailCommand',['user'=>10])->monthly();你传递的值在后台转换为实际的shell命令并传递给exec()以在操作系统上运行它。您传递的值将转换为实际的shell命令并传递给exec()以在操作系统上运行它调度一个作业你可以使用Job类名或一个实际对象将一个作业调度到队列:你可以使用Job类名或一个实际对象将作业分发到队列:$schedule->job('App\Jobs\SendOffer')->monthly();$schedule->job(newSendOffer(10))->monthly();在底层,Laravel将创建一个回调,调用dispatch()辅助方法来调度你的命令。Laravel将创建调用dispatch()辅助方法来分派命令的回调函数。所以这里创建事件的两种实际方法是调用exec()或call(),第一种方法提交Illuminate\Console\Scheduling\Event实例,后者提交Illuminate\Console\Scheduling\CallbackEvent实例,它有一些特殊的处理。所以这里创建事件的两种实际方法是调用exec()或call(),第一种提交Illuminate\Console\Scheduling\Event的实例,后者提交一个Illuminate\Console\Scheduling\CallbackEvent来做一些特别的事情.Buildingthecronexpression创建一个cron表达式使用ScheduledEvent的计时方法,laravel在底层为该事件构建一个CRON表达式,默认情况下该表达式设置为每分钟运行一次命令:使用scheduled的计时方法事件,laravel将为该事件创建一个CRON表达式,默认情况下,该表达式设置为每分钟运行一次命令:******但是当您调用hourly()时,例如,表达式将更新为:但是例如,当您调用hourly()时,表达式将更新为:hourly(),表达式将更新为:0*****如果您调用dailyAt('13:30'),则表达式将是更新为:当您调用dailyAt('13:30')时,表达式将更新为:表达式将更新为:3013****例如,如果您调用两次Daily(5,14),表达式将是更新为:05、14****一个非常智能的抽象层,可以节省您大量的研究来找到合适的cron表达式,但是如果您愿意,您也可以传递自己的表达式:一个非常智能的抽象层,可以节省您大量的研究来找到正确的cron表达式,但是如果您愿意,您也可以传递自己的表达式:正确的cron表达式,但如果你愿意,你也可以传递你自己的表达式:$schedule->command('mail:send')->cron('0*****');时区怎么样?如何设置时区?如果你想要CRON要针对特定??时区评估的表达式,您可以使用:您设置的时区值并更新Carbon日期实例以反映该值。Laravel检查您设置的时区值并更新Carbon日期实例以使其工作所以laravel使用CRON表达式检查命令是否到期?那么Laravel会使用CRON表达式检查命令是否过期?确切地说,Laravel使用mtdowling/cron-expression库来根据当前系统时间(相对于我们设置的时区)来确定命令是否到期。当前系统时间(相对于我们设置的时区)。在运行commandDuration约束时添加约束例如,如果您希望命令每天运行但仅在两个特定日期之间运行:例如,如果您希望命令每天运行但仅在两个特定日期之间运行运行于:->between('2017-05-27','2017-06-26')->每日();而如果你想阻止它在特定时间段内运行:如果你想阻止它在特定时间段内运行:在特定时间段内运行:->unlessBetween('2017-05-27','2017-06-26')->daily();EnvironmentconstraintsenvironmentrestrictionsYoucanusetheenvironments()methodtopasslistofenvironmentsthecommandisallowedtorununder:Youcanuseenvironments()设置环境列表允许运行命令:->environments('staging','production');维护模式默认情况下,计划命令不会在应用程序处于维护模式时运行,但是您可以使用以下方法更改它:默认情况下,计划命令不会在应用程序处于维护模式时运行,但您可以使用以下方法更改它:->evenInMaintenanceMode()OSUser你可以设置运行命令的操作系统用户:->user('forge')UnderthehoodLaravel将使用sudo-uforge设置操作系统上的用户。Laravel将使用sudo-uforge设置操作系统上的用户自定义约束您可以使用when()和skip()方法定义自己的自定义约束:您可以使用when()和skip()方法来定义自定义约束://仅当用户计数大于时运行命令1000->when(function(){returnUser::count()>1000;});//运行命令,除非用户计数大于1000->skip(function(){returnUser::count()>1000;});之前和之后回调使用before()和then()方法,您可以注册将在命令完成执行之前或之后运行的回调:使用before()和then()方法可以注册要在之前或之后运行的回调函数命令完成执行:->before(function(){Mail::to('myself@Mail.com',newCommandStarted());})->then(function(){Mail::to('myself@Mail.com',newCommandFinished());});YoucanalsopingURLsorwebhooksusingthepingBefore()andthenPing()methods:YoucanalsousepingBefore()andthenPing()methodtopingURLsorwebhooks:->ping('https://my-webhook.com/start')->thenPing('https://my-webhook.com/finish')使用这些命令,laravel在后台注册一个之前/之后的回调,并使用Guzzle发送一个GETHTTP请求:return$this->before(function()use($url){(newHttpClient)->get($网址);});转载请注明:转载自瑞恩是菜鸟|LNMP技术栈笔记很有用,为什么不打赏这篇文章的链接地址:分析Laravel定时任务--事件属性