📜  laravel 仅在生产环境中运行计划 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:13.608000             🧑  作者: Mango

Laravel 仅在生产环境中运行计划 - PHP

在 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() 方法来在生产环境中运行计划任务和事件。这不仅可以提高性能,还可以使后台任务更加稳定和可靠。