如何确保从队列作业启动的进程在超时后终止?

我在终止从队列作业启动的进程时遇到问题。


我使用 yii2-queue 扩展来运行一些长时间运行的系统命令,这些命令的总执行时间限制由getTtrRetryableInterface的方法控制。该命令可能需要几分钟到几小时才能完全完成,但我需要在达到 60 分钟标记后将其终止。


    <?php


    use Symfony\Component\Process\Process;

    use yii\base\BaseObject;

    use yii\queue\RetryableJobInterface;


    class TailJob extends BaseObject implements RetryableJobInterface

    {

        public function getTtr()

        {

            return 10;

        }


        public function execute($queue)

        {

            $process = new Process('tail -f /var/log/dpkg.log');

            $process->setTimeout(60);

            $process->run();

        }


        public function canRetry($attempt, $error)

        {

            return false;

        }

    }

现在,我面临的问题是,即使queue/listen终止作业,tail命令(这只是一个示例;在生产中我需要运行不同的命令)仍在后台运行。有什么办法可以强制系统tail在作业被终止时终止命令?


撒科打诨
浏览 185回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP