Laravel 我如何在后台运行命令,它只在前台运行?

Laravel 我如何在后台运行命令,它只在前台运行?,laravel,cron,schedule,laravel-scheduler,Laravel,Cron,Schedule,Laravel Scheduler,我有一个命令,它的工作原理类似于php artisan queue:listen。它不能在后台工作,但我必须将其添加到cron选项卡,但在那里它不工作。是否可以执行类似于php artisan schedule:run的操作?最重要的是,当我中断此命令时,所有功能都将停止。在这种情况下我该怎么办?拉雷维尔有自己的克朗。首先,您应该将laravelcron添加到Linux系统cron中 * * * * * cd /path-to-your-project && php artisa

我有一个命令,它的工作原理类似于
php artisan queue:listen
。它不能在后台工作,但我必须将其添加到cron选项卡,但在那里它不工作。是否可以执行类似于php artisan schedule:run的操作?最重要的是,当我中断此命令时,所有功能都将停止。在这种情况下我该怎么办?

拉雷维尔有自己的克朗。首先,您应该将laravelcron添加到Linux系统cron中

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
然后可以将命令添加到Laravel cron

Laravel crons位于文件/app/Console/Kernel.php中 are应该在函数内部 受保护功能计划(计划$schedule) 比如说

 protected function schedule(Schedule $schedule)
    {
      $schedule->command('emails:send Taylor --force')->cron('* * * * *');
    }

但如果您希望命令作为系统进程而不是cron运行,则应使用supervisors程序(supervisord)或者,您可以为PHP命令文件创建一个systemd服务文件,然后像运行正常的systemd服务一样运行,甚至还可以通过web界面中的monit程序来管理此服务

如果您的PHP脚本是一个进程,则表示类的构造函数方法在启动脚本时仅运行一个,如果您在构造函数认为脚本中的数据将过时 您的流程脚本应该是这样的流程

class OpenOrders extends Command
{
     public function __construct()
     {
            parent::__construct();
     }

     public function handle()
     {
        $this->initTicker();
        $this->updateBalances();

        //the Process
        while (true) {

            //this is the right place to read DB data
            $this->getAllOptions();

            $this->openOrders = $this->getOpenOrders();

            
        }

        return 0;
    }
 }

谢谢,我想我会尝试使用Supervisor,因为它在cron中不起作用。是的,使用Supervisor是一个好主意,在Laravel文档中有一些关于它的信息,我尝试通过Supervisor来做,效果很好。非常感谢。但如果我在DB中更改了某些内容,它不会重新启动。实际上,我将自动重新启动设置为config。我能做什么?因为当我更改设置值时,当我不使用supervisorctl restart时,它也不会更改