📅  最后修改于: 2023-12-03 15:17:13.608000             🧑  作者: Mango
在 Laravel 应用程序中,我们通常使用计划任务(Scheduled Tasks)来定期执行一些任务,例如每日备份数据库,每周发送邮件等。但是,在开发环境中运行计划任务可能会对计算机性能造成影响,因此 Laravel 提供了一种在生产环境中运行计划任务的方法。
在 Laravel 5.5 及以上版本中,只需在 app/Console/Kernel.php
文件中的 $schedule
属性上调用 runInBackground()
方法来实现在后台运行计划任务:
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')
->hourly()
->runInBackground();
}
以上代码是一个示例,表示在每小时执行 inspire
命令时,将此任务放入后台运行。 runInBackground()
方法将任务放入队列,并使控制台进程保持活动状态,以便可以更快地执行后续任务。
在生产环境中,您应该使用类似下面的命令将 Laravel 的计划任务放入后台运行:
php artisan schedule:run >> /dev/null 2>&1 &
这将在后台运行 Laravel 计划任务,并将输出重定向到空设备。
Laravel 计划任务依赖队列,因此在生产环境中运行计划任务时,您还需要确保队列进程正在运行。您可以使用 Laravel 自带的 queue:work
命令来启动队列进程。
类似地,与计划任务相同,您也可以使用事件来触发后台任务。以下是一个示例,表示在用户注册后发送欢迎邮件:
protected function schedule(Schedule $schedule)
{
$schedule->event(new SendWelcomeEmail(auth()->user()))
->runInBackground();
}
以上代码表示在后台运行一个 SendWelcomeEmail
事件,以发送欢迎邮件。
在 Laravel 应用程序中,我们可以通过调用 runInBackground()
方法来在生产环境中运行计划任务和事件。这不仅可以提高性能,还可以使后台任务更加稳定和可靠。