在不停止子进程的情况下重新启动主管

时间:2016-03-16 04:59:33

标签: unix process supervisord

我正在使用gearmansupervisor来管理我的工作流程。我有一个案例,我需要停止/重启主管而不影响当前正在运行的进程。

e.g。我已将supervisor配置文件中的numprocs值配置为2.我启动主管并运行2个进程。

现在我想重新启动supervisor,这样进程数就变为4,其中supervisor只控制两个新进程。有没有办法可以做到这一点。

我尝试在重新启动之前重命名sock文件。它没用。我正在使用Amazon Linux。

修改

我将详细阐述我正在做的事情。我有一些齿轮工的工人流程,由主管管理。它工作正常,但是当我重新启动主管时,即使工人正忙于处理工作,工人也会被杀,新员工也会被启动。所以,我失去了流程所做的所有工作。

所以,我使用php-pcntl拦截主管产生的信号,然后在作业结束后退出。这似乎运作良好。

我发送如下的中断:

supervisorctl signal SIGTERM all

然后在我的工作代码中,我有以下内容。

public static function work(GearmanWorker $gw){
        pcntl_signal(SIGTERM, function($sig){
            exit;
        });

        while(true){

            $gw->work();

            // Calls signal handlers for pending signals
            pcntl_signal_dispatch();

        }

    }

现在,当我更新我的工作人员代码时,我应该重新启动主管。但是,如果我直接重启,那么即使采用上述实现,所有进程都会终止。我想避免终止旧的prcoesses,因为他们会在调用pcntl_signal_dispatch();时自行退出。

0 个答案:

没有答案