gpt4 book ai didi

php - 中止和恢复 Symfony 控制台命令

转载 作者:可可西里 更新时间:2023-10-31 23:03:58 25 4
gpt4 key购买 nike

我有一个 Symfony 控制台 命令,它遍历一个可能很大的项目集合,并对每个项目执行一个任务。由于集合可能很大,因此命令可能需要很长时间才能运行(数小时)。命令完成后,它会显示一些统计信息。

我想让以一种很好的方式中止命令成为可能。现在,如果我中止它(即在 CLI 中使用 ctrl+c),则没有统计摘要,也无法输出恢复命令所需的参数。另一个问题是该命令可能会在处理项目的中间终止 - 如果它只能在处理项目之间终止会更好。

那么有没有办法告诉命令“尽快中止”,或者让 ctrl+c 命令被这样解释?

我尝试使用 ConsoleEvents::TERMINATE 事件,尽管它的处理程序只在命令完成时触发,而不是在我 ctrl+c 时触发。而且我一直无法找到有关制作此类可恢复命令的更多信息。

最佳答案

这对我有用。在实际执行信号处理程序之前,您需要调用 pcntl_signal_dispatch。没有它,所有任务都会先完成。

<?php
use Symfony\Component\Console\Command\Command;

class YourCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output)
{
pcntl_signal(SIGTERM, [$this, 'stopCommand']);
pcntl_signal(SIGINT, [$this, 'stopCommand']);

$this->shouldStop = false;

foreach ( $this->tasks as $task )
{
pcntl_signal_dispatch();
if ( $this->shouldStop ) break;
$task->execute();
}

$this->showSomeStats($output);
}

public function stopCommand()
{
$this->shouldStop = true;
}
}

关于php - 中止和恢复 Symfony 控制台命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com