【问题标题】:How can I run in background command, which runs only in foreground?如何在仅在前台运行的后台命令中运行?
【发布时间】:2021-07-04 23:45:46
【问题描述】:

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

【问题讨论】:

    标签: laravel cron schedule laravel-scheduler


    【解决方案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 文件中 are 应该在函数内部 受保护的功能计划(Schedule $schedule) 例如

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

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

    【讨论】:

    • 谢谢,我想我会尝试使用Supervisor,因为它在cron中不起作用。
    • 是的,使用 Supervisord 是个好主意,在 Laravel 文档laravel.com/docs/8.x/queues#supervisor-configuration 中有一些关于它的信息
    • 我尝试通过 Supervisor 进行操作,效果很好。谢谢你。但是,如果我在 DB 中更改某些内容,它不会重新启动。实际上,我将自动重启放入配置中。我能做些什么?因为当我更改设置值时,它也不会更改,而我不使用 supervisorctl restart
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多