0

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

4

2 回答 2

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 $schedule)中

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

但是,如果您希望您的命令作为系统进程而不是 cron 运行,您应该使用 supervisors 程序(supervisord),或者您可以为 PHP 命令文件创建一个 systemd 服务文件,然后像普通的 systemd 服务一样运行,甚至管理这个也可以通过带有 Web 界面的监控程序提供服务

于 2021-04-09T05:33:17.567 回答
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;
    }
 }
于 2021-04-09T09:00:16.830 回答