如何在Symfony应用程序中像后台任务一样运行命令?

时间:2018-05-21 12:53:49

标签: php symfony backgroundworker background-process symfony-2.8

我必须为我创建的控制台命令设置一个作业管理器。 控制台命令需要20到30分钟才能完成。 这个控制台命令正在向数据库写入多个查询,并假设它不能缩小到更短的时间。

我已经在Symfony2.8中创建了所有内容,但我是一个真正使用它的新手。 所以我enter link description here

我只需要像后台任务一样运行此命令。没有触及应用程序的前端。任何人都可以帮我吗?

好吧,好吧。这需要定期完成,但需要在用户/客户请求上完成。

2 个答案:

答案 0 :(得分:2)

这在很大程度上取决于它需要做什么。

只运行一次吗?登录到服务器,使用tmux或screen来保持运行,即使断开连接,然后运行命令(bin/console name-of-command)。

定期运行 - 为需要运行它的用户在crontab中输入一个条目。

不知道脚本需要做什么,以及执行的频率(如果有的话),很难说下一步可能是什么。

答案 1 :(得分:1)

您需要The Process Component

你可以通过以下方式在后台运行php:

$builder = new ProcessBuilder();
$builder->setPrefix('/usr/bin/php'); // put your php executable here
$cmd = $builder->setArguments(['/full/path/to/php/file/you/want/to/run.php', 'argumentOne', 'argumentTwo'])
      ->getProcess()
      ->getCommandLine();

$process = new Process($cmd . '  > /dev/null 2>&1 &'); // async trick here
$process->run();