script - Curl alternativa a Cron Job PHP
ejecutar script php cada cierto tiempo (1)
Actualmente estoy usando el siguiente comando php exec para cargar una url en el lado del servidor ya que necesito una solución que no implique un trabajo cron y que también sea asincrónica, es decir, el usuario puede navegar desde la página una vez que se inicia la tarea y la tarea aún se ejecutará:
exec("nohup curl ".$dbupdateurl." > /dev/null 2>&1 & echo $!");
Esto funciona bien la mayor parte del tiempo, sin embargo es bastante impredecible. ¿Hay una forma mejor / más sólida para lograr esto?
Gracias,
Mate
Si está utilizando PHP-FPM, puede usar fastcgi_finish_request
:
Esta función vacía todos los datos de respuesta al cliente y finaliza la solicitud. Esto permite realizar tareas que consumen mucho tiempo sin dejar abierta la conexión al cliente.
De esta forma puede usar las funciones nativas de PHP para realizar su Webrequest luego de que el usuario ya haya obtenido la respuesta. Un ejemplo sobre cómo usar esta función se puede encontrar en el ejemplo de cómo usar fastcgi_finish_request ()
Si no está utilizando PHP-FPM , puede usar una JobQueue como Gearman para trabajar fuera de la solicitud original. Esta es probablemente la forma más confiable de hacerlo, ya que es un sistema dedicado para manejar este tipo de trabajos.
También tenga en cuenta que Curl puede hacer peticiones http asincrónicas . Si el problema es que no desea esperar la respuesta http, esta podría ser una solución más fácil que presentar una JobQueue.
Por último, pero no por eso menos importante, puedes pasar un proceso adicional de PHP para hacer el trabajo. Consulte Cómo puedo hacer una tarea que consume tiempo después de enviar una respuesta al cliente y php ejecutar un proceso en segundo plano