【问题标题】:How to pause a supervisor in Laravel Horizon如何在 Laravel Horizo​​n 中暂停主管
【发布时间】:2022-12-30 17:41:16
【问题描述】:

我在地平线上有多个主管,他们工作正常,问题是我想通过我自己的网络界面与他们互动,我所说的互动是指pause他们和continue(取消暂停他们)。

为此,我希望尽可能不使用系统(在artisan horizon:pause-supervisor中它发送posix_kill($supervisor->pid, 12))

我试图通过这样做来实例化主管:

class HorizonManager
{
    private SupervisorRepository       $supervisors;
    private MasterSupervisorRepository $masters;
    private WorkloadRepository         $workload;
    private RedisJobRepository         $jobRepository;
    private QueueManager               $queueManager;

    public function __construct(MasterSupervisorRepository $masters, SupervisorRepository $supervisors, WorkloadRepository $workload, RedisJobRepository $jobRepository, QueueManager $manager)
    {
        $this->masters = $masters;
        $this->supervisors = $supervisors;
        $this->workload = $workload;
        $this->jobRepository = $jobRepository;
        $this->queueManager = $manager;

    }

    public function pauseSupervisor(string $supervisorName){
        $supervisor = $this->supervisors->find($supervisorName);
        $supervisorOpt = new SupervisorOptions(...$supervisor->options);
        $sup = new Supervisor($supervisorOpt);
        $sup->pause();
        $sup->persist();
        return $this->supervisors->find($supervisorName);
    }
}

在函数的返回中,我暂停了主管,但它并没有真正暂停(即使我坚持实例化主管它仍然作为一个进程运行)

【问题讨论】:

    标签: php laravel laravel-8 php-8 horizon


    【解决方案1】:

    对于那些感兴趣的人,我通过实例化它失败了,所以我使用 artisan call 发送命令:

    define('SIGUSR2', 12);
    Artisan::call('horizon:pause-supervisor', ['name'=>$supervisorName]);
    $supervisor = $this->supervisors->find($supervisorName);
    $supervisor->status = 'paused';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多