¿Cuál es la forma correcta de ejecutar las tareas de Symfony en un proceso separado? Mi primera suposición sería usar fork/exec, pero de acuerdo con this, no se puede hacer con nada que mantenga abiertos los descriptores de archivos o las conexiones (como MySQL). Entonces eso no suena como una opción. Otra alternativa es hacer exec('symfony taskname &')
, pero eso parece un truco. ¿Es eso lo mejor que puedo hacer? Hay una tercera forma?¿Cómo ejecutar correctamente una tarea de Symfony en el fondo de una acción?
Respuesta
Así es como terminé haciéndolo:
exec('nohup ' . sfConfig::get('sf_root_dir') . '/symfony TASKNAME >/dev/null &');
Usted tiene que redirigir la salida estándar, o de lo contrario no se ejecutará en segundo plano (aunque usted no tiene que usar/dev/null si querer la salida real). En mi caso, configuré todas mis tareas para usar el registrador de archivos de Symfony, así que no fue un problema.
Todavía estoy buscando una mejor solución. Esto parece un truco.
Php no sabe multithreading.
Y sí, es un gran defecto en php IMO.
Hay una forma de hacer subprocesos múltiples, pero no se recomienda. Es complejo, y es feo y pregunta, no pide problemas.
Por lo tanto, creo que lo mejor que puede hacer es algo así como un ejecutivo, o algo así como llamar a un servicio web como llamar?
¿Qué? http://php.net/manual/en/book.pthreads.php (Oh, es 2010) :) – Nicklasos
La forma en que esto se maneja generalmente es usar una cola de tareas. Cuando desee hacer un proceso en segundo plano, agréguelo a una cola de algún tipo (podría usar su base de datos, o podría usar un daemon de cola real como beanstalkd). Luego tiene algunos procesos desmembrados cuyo trabajo es sacar el trabajo de la cola y realizarlo.
- 1. Ejecutar fondo Tarea En Javascript
- 2. ¿Ejecutar SQL en una tarea de Gradle?
- 3. tarea de fondo java
- 4. ¿Cómo ejecutar una tarea diariamente desde Java?
- 5. ¿Ejecutar incondicionalmente una tarea en hormiga?
- 6. iOS: finalización de una tarea al ingresar el fondo
- 7. Java 1.6 Roto cuando se lo llama por fondo Tarea de Symfony
- 8. ¿Cómo puedo llamar a una acción de controlador desde una tarea de rake?
- 9. Rails Tarea de fondo de la tarea
- 10. ¿Cómo adjuntar una tarea personalizada para ejecutar antes de la tarea de prueba en sbt?
- 11. Tarea confiable de fondo repetitivo en android
- 12. Iniciar una tarea de fondo de larga duración
- 13. ¿Cómo ejecutar periódicamente una tarea dentro de emacs?
- 14. Ejecutar una tarea predeterminada en ANT en caso de falla
- 15. Ejecutar tarea de rake en el controlador
- 16. Implementar correctamente el proceso de fondo Subproceso en ASP.NET
- 17. Ejecutar una tarea Ant antes de depurar en Eclipse
- 18. ¿Cómo se usa menos memoria mientras se ejecuta una tarea en Symfony 1.4?
- 19. tarea fondo trabajador C#
- 20. Ejecutando una tarea de fondo efímera desde MVC
- 21. hacer: ejecutar una acción para cada requisito
- 22. Cómo ejecutar aplicaciones Android en el fondo
- 23. Cómo se puede ejecutar una macro de Excel a través de una tarea de programación
- 24. Cómo usar PHPExcel correctamente con Symfony 2
- 25. Nombre de acción de Symfony en la plantilla
- 26. ¿Cómo obtener y usar una matriz asociativa de YAML a la acción en Symfony?
- 27. Cómo forzar una excepción de una tarea para ser observada en una tarea de continuación?
- 28. ¿Se puede ejecutar una tarea de SSIS desde .net?
- 29. Ejecutar tarea SBT desde Eclipse
- 30. Usar una acción asíncrona para ejecutar el código síncrono
La función pcntl_fork solo funciona para la versión cgi de php. Si está ejecutando php a través de apache es un no ir. Usar exec es prácticamente la única forma de hacerlo con apache, pero definitivamente es feo y debe ejecutarse silenciosamente para ejecutarse al mismo tiempo. – Jestep
Me llevó mucho tiempo descubrir que debe redirigir la salida estándar a un archivo para que realmente se ejecute. ¿Es eso lo que quieres decir con "correr silenciosamente"? –