Jesús Amieiro

Ejecutar un comando en Laravel en background y/o sin el usuario logueado

Cuando estoy en un entorno de test con aplicaciones en Laravel (esto es extrapolable a cualquier otro entorno de desarrollo y/o framework que disponga de una interfaz de línea o CLI), a veces ejecuto comandos cuya ejecución puede llevar bastante tiempo.

Un ejemplo claro es una migración con un seeder con un alto número de seeds, para probar la aplicación con un entorno sobrecargado de datos.

En este tipo de casos lo ideal es poder dejar el comando en background y poder cerrar la consola si es necesario.

Un ejemplo práctico de esta situación es la ejecución del comando

php artisan migrate:refresh --seed

que resetea todas las migraciones, vuelve a ejecutarlas y luego alimenta la base de datos con los seeders programados.

Para resolver la problemática puedo ejecutar

nohup php artisan migrate:refresh --seed > nohup.log 2>&1 &

Por lo tanto, tras ejecutar este comando podré seguir usando la consola y/o cerrar la sesión y el comando seguirá ejecutándose.

Si en vez de almacenar el log en un archivo lo quiero descartar, simplemente tengo que ejecutar

nohup php artisan migrate:refresh --seed > /dev/null 2>&1 &

/dev/null descarta toda la información que se escribe o redirige en él.

Si quiero ver en tiempo real el log de la ejecución del comando, tengo que ejecutar

tail -f nohup.log

 

Exit mobile version