我在终止从队列作业启动的进程时遇到问题。
我使用 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在作业被终止时终止命令?