我已经使用Symfony2 a simple command-line tool调用了一个服务,该服务在出错时会抛出UniverseException
。有点像这样;
# /src/AppBundle/Command/UniverseCommand.php
class UniverseCommand extends ContainerAwareCommand
{
protected function execute(InputInterface $input, OutputInterface $output)
{
if ( 1 == 2 )
throw new UniverseException('Strange things are afoot');
}
}
我还添加了CommandExceptionListener
,如果抛出MyAppBundleException
,我可以恢复我的应用程序。
# /src/AppBundle/EventListener/CommandExceptionListener.php
class CommandExceptionListener
{
public function onConsoleException(ConsoleExceptionEvent $event)
{
if ($exception instanceof UniverseException) {
// Reboot the universe
// Continue existence..?
}
}
}
效果很好!
但现在我想使用daemonizable-command捆绑包将命令作为守护程序运行。如果我的服务抛出异常,则执行停止,这会产生一个可怕的守护进程!
我的应用已处理此类异常。有没有办法从它恢复并允许我的守护进程继续执行?
修改
我尝试在命令中添加try
/ catch
,就像这样..
# /src/AppBundle/Command/UniverseCommand.php
class UniverseCommand extends ContainerAwareCommand
{
protected function execute(InputInterface $input, OutputInterface $output)
{
try{
if ( 1 == 2 )
throw new UniverseException('Strange things are afoot');
}catch(\Exception $e){
echo 'The universe behaved badly but I rebooted it.';
}
}
}
它捕获异常并且守护进程继续!但是现在,当然,我的事件监听器并没有被解雇,而且例外处理不正确。