如何在仅在前台运行的后台命令中运行?

时间:2021-04-09 04:58:03

标签: laravel cron schedule laravel-scheduler

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

2 个答案:

答案 0 :(得分:1)

Laravel 有自己的 cron。首先,你应该将 Laravel cron 添加到 Linux 系统 cron

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

然后你可以将你的命令添加到 Laravel cron。

Laravel crons 存在于 /app/Console/Kernel.php 文件中 应该在函数内部 受保护的函数调度(调度 $schedule) 例如

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

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

答案 1 :(得分:0)

如果您的 php 脚本是一个进程,则意味着类的构造函数方法仅在您启动脚本时运行,如果您在构造函数中红色 db 数据,则脚本中的数据将过时 您的流程脚本应该是这样的流程

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;
    }
 }
相关问题