微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

解决方法

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 程序来管理此服务

,

如果您的 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;
    }
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。