Saltar al contenido

Introducción

Los comandos de consola son una herramienta indispensable en el arsenal de cualquier desarrollador Laravel. Nos permiten automatizar tareas recurrentes, procesar datos en segundo plano, y ejecutar operaciones programadas. En este artículo, exploraremos a fondo cómo crear comandos personalizados y cómo utilizarlos con el sistema de Task Scheduling de Laravel para programar su ejecución automática.

Parte 1: Comandos Personalizados en Laravel

Creando tu Primer Comando

Laravel ofrece una forma sencilla de generar nuevos comandos mediante Artisan:

Este comando generará una nueva clase en el directorio app/Console/Commands. Si el directorio no existe, Laravel lo creará automáticamente.

Estructura de un Comando

La estructura básica de un comando incluye:

Definiendo la Firma del Comando

La propiedad $signature define el nombre del comando y los argumentos que acepta. Esta firma sigue una sintaxis similar a las rutas en Laravel.

Argumentos

Los argumentos se definen entre llaves {}:

Puedes hacer que los argumentos sean opcionales añadiendo un signo de interrogación ?:

También puedes definir valores por defecto:

Opciones

Las opciones se definen con -- seguido del nombre de la opción:

Para opciones que requieren un valor:

Con valor por defecto:

Atajos para opciones:

Arrays de Entrada

Para argumentos que aceptan múltiples valores:

Para opciones que aceptan múltiples valores:

Descripciones de Entradas

Puedes añadir descripciones a los argumentos y opciones:

El Método Handle

El método handle() es donde reside la lógica principal del comando. Este método se ejecuta cuando se invoca el comando.

Puedes inyectar dependencias en el método handle():

Entrada y Salida en Comandos

Obteniendo Entradas

Para obtener argumentos:

Para obtener opciones:

Solicitando Entradas

El método ask() muestra una pregunta al usuario:

Para contraseñas (entrada oculta):

Para confirmaciones:

Para selecciones múltiples:

Generando Salidas

Para mostrar información:

Para mostrar tablas:

Para barras de progreso:

Comandos en Cierre (Closure Commands)

Los comandos basados en cierres son una alternativa a definir comandos como clases:

Puedes añadir una descripción usando el método purpose():

Registrando Comandos

Laravel registra automáticamente todos los comandos en el directorio app/Console/Commands. Si tienes comandos en otras ubicaciones, puedes registrarlos en bootstrap/app.php:

También puedes registrar comandos específicos:

Comandos Aislables

A veces, necesitas asegurarte de que solo una instancia de un comando se ejecute a la vez. Para lograr esto, puedes implementar la interfaz Illuminate\Contracts\Console\Isolatable:

Para ejecutar el comando aislado:

Parte 2: Task Scheduling en Laravel

Configuración Básica

El programador de tareas de Laravel te permite definir tu programación de comandos directamente en el código de tu aplicación. Esto elimina la necesidad de crear entradas cron manualmente.

Las tareas programadas se definen generalmente en el archivo routes/console.php:

Definiendo Horarios

Laravel ofrece una amplia variedad de métodos para definir la frecuencia de ejecución de tus tareas:

Frecuencias Comunes

Expresiones Cron Personalizadas

Para frecuencias más específicas:

Tipos de Tareas Programables

Comandos Artisan

Trabajos en Cola

Comandos del Sistema

Cierres (Closure)

Restricciones Adicionales

Restricciones de Días

Restricciones de Horario

Restricciones Condicionales

Restricciones de Entorno

Evitando Superposiciones de Tareas

Para evitar que una tarea se ejecute si la instancia anterior aún está en ejecución:

Ejecutando Tareas en un Solo Servidor

Para entornos con múltiples servidores, puedes asegurarte de que una tarea programada se ejecute solo en un servidor:

Tareas en Segundo Plano

Para ejecutar tareas en segundo plano:

Grupos de Tareas Programadas

Para aplicar la misma configuración a múltiples tareas:

Salida de Tareas

Para guardar la salida de una tarea:

Para enviar la salida por email:

Hooks de Tareas

Para ejecutar código antes o después de una tarea:

Notificaciones via URL

Para notificar a un servicio externo:

Ejecutando el Scheduler

Para que el programador de tareas funcione, debes configurar un solo trabajo cron en tu servidor que ejecute el comando schedule:run cada minuto:

Tareas Sub-Minuto

Laravel también permite programar tareas que se ejecuten en intervalos inferiores a un minuto:

Para tareas sub-minuto, es recomendable utilizar trabajos en cola o comandos en segundo plano:

Ejecutando el Scheduler Localmente

Durante el desarrollo, puedes usar el comando schedule:work:

Este comando ejecutará el programador en primer plano y lo invocará cada minuto hasta que termines el comando.

Conclusión

Los comandos personalizados y el Task Scheduling en Laravel son herramientas fundamentales para la automatización de tareas y procesos. Dominando estos conceptos, podrás crear aplicaciones más eficientes, automatizar tareas repetitivas y programar procesos en segundo plano de manera efectiva.

La combinación de comandos bien diseñados con el poderoso sistema de programación de tareas de Laravel proporciona una solución robusta para cualquier necesidad de automatización en tus aplicaciones.

school Curso completo

Curso Laravel 12
Completo 2026

El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje