Ejecutar script BASH en segundo plano desde PHP

PHP

En momentos es necesario hacer llamadas a comandos de Linux desde PHP, en ocasiones estos scripts dan una salida que luego procesamos en PHP y a veces no, pero todo script PHP tiene un tiempo máximo de ejecución que puede ser configurado desde el Apache o con normativas dentro del mismo script.

Supongamos que por cualquier razón el script BASH que vamos a correr tiene un tiempo variable de corrida o simplemente va a durar mucho más que lo que podemos esperar con nuestro script PHP, ¿qué hacemos en este caso? La respuesta es fácil, correr el script BASH en segundo plano, pero con un ligero truco.

Si solo mandamos el script al segundo plano agregándole ‘&’ al final, el PHP seguirá esperando que el script termine para poder continuar con la carga, entonces es donde entra el truco de tener que redireccionar la salida estándar a un archivo de texto o bien a una salida nula.

El primer ejemplo es redireccionando a una salida nula y el segundo ejemplo es redireccionando la salida a un archivo de texto:

exec("sh nombre_del_script.sh > /dev/null &");
exec("sh nombre_del_script.sh > /home/vic/archivo_salida.txt &");

En caso de querer correr un script PHP por la línea de comando y enviarlo en segundo plano lo hacemos de la siguiente manera:

exec("php nombre_del_script.php > /dev/null &");
exec("php nombre_del_script.php > /home/vic/archivo_salida.txt &");

El comando exec acepta un segundo parámetro que sirve para almacenar en forma de arreglo todas las líneas de texto que sean retornadas por el script en ejecución.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*

Markup Controls
Emoticons Smile Grin Sad Surprised Shocked Confused Cool Mad Razz Neutral Wink Lol Red Face Cry Evil Twisted Roll Exclaim Question Idea Arrow Mr Green