Programación de tareas
Clase 12 de 33 • Curso Avanzado de Laravel
Contenido del curso
Entorno de trabajo y repaso de Laravel
Manejo de tu base de datos con Laravel
La terminal de Laravel
Eventos y tareas de Laravel
Manejo de errores
El corazón de Laravel
Creación de paquetes
- 26

Cómo crear paquetes Laravel con Composer
08:51 min - 27
Propiedades para manejo de dependencias
02:02 min - 28
Comprende el archivo composer.json
02:23 min - 29

Cómo Composer carga clases automáticamente
04:18 min - 30

Crear mis propios Services Providers
08:58 min - 31

Cómo publicar archivos con Service Provider
04:12 min - 32

Instalando paquetes desde GitHub con Composer
10:35 min - 33

Publicar tu paquete PHP en Packages
03:12 min
Automatiza con confianza las tareas críticas en Laravel: desde enviar correos a las 3 a. m. hasta limpiar tablas, el sistema de programación con cron y el Kernel centraliza todo en un solo punto. Aquí verás cómo usar Artisan, el método schedule y controles como ejecución en un único servidor, modo mantenimiento y logs en storage.
¿Cómo programar tareas en Laravel con cron y Kernel?
Programar tareas en Laravel se hace en el método schedule de la clase Kernel ubicada en app/console/Kernel.php. Con un único cron que ejecuta php artisan schedule:run, el sistema revisa qué tareas están pendientes y las dispara automáticamente.
¿Dónde registrar comandos personalizados de Artisan?
- Registra tus comandos en la clase Kernel de app/console/Kernel.php.
- Ejemplos mencionados: "sendnewsletter command" y "sendemail-verification command".
- El comando de newsletter tiene una opción --s para indicar si debe ejecutarse directamente.
- Al ejecutar manualmente, solicita confirmación antes de enviar correos. Si no hay confirmación: "No se enviaron correos".
¿Cómo definir tareas con closures y frecuencias?
- En schedule puedes usar funciones anónimas y devolver un simple echo "Hola".
- Si no defines frecuencia y ejecutas el scheduler, verás "Hola" al correr el comando.
- Cambiar la frecuencia a cada minuto mostrará "Hola" cuando corresponda. A cada cinco minutos, verás la salida solo al llegar el minuto cinco del servidor.
// app/console/Kernel.php
protected function schedule($schedule)
{
// Comando Inspire diario.
$schedule->command('inspire')->daily();
// Closure simple.
$schedule->call(function () {
echo 'Hola';
});
}
¿Qué cron ejecutar para disparar el scheduler?
- Usa un único cron que llame al scheduler de Laravel.
php artisan schedule:run
- Configura un crontab del sistema operativo o servidor para que se ejecute de forma periódica.
- Recuerda: el scheduler verifica y ejecuta lo que esté pendiente en Kernel.
¿Qué métodos de frecuencia y control ofrece schedule?
Además de las frecuencias como diariamente, cada minuto o cada cinco minutos, existen métodos para controlar el comportamiento: ejecutar en un único servidor, permitir ejecución en modo mantenimiento, evitar solapamientos y enviar salida a un archivo de log.
¿Cómo fijar frecuencias como daily, cada minuto o Mondays?
- Comando de newsletter que corre todos los lunes usando Mondays.
- Comando de recordatorio de verificación de email que corre diariamente con la opción --class.
$schedule->command('sendnewsletter command')
->mondays();
$schedule->command('sendemail-verification-reminder-command --class')
->daily();
- Frecuencias disponibles: diariamente, cada minuto, cada cinco minutos, entre otras.
- Define la frecuencia según la necesidad del proceso.
¿Cómo limitar ejecución con on_server y mantenimiento?
- on_server limita la ejecución a un único servidor cuando tu aplicación corre en varios.
- Úsalo para que un usuario no reciba correos duplicados.
- even_in_maintenance_mode permite que la tarea se ejecute aunque la app esté en modo mantenimiento.
php artisan down
$schedule->command('sendnewsletter command')
->mondays()
->on_server()
->even_in_maintenance_mode();
- Ideal cuando ciertos procesos no deben detenerse durante mantenimientos programados.
¿Cómo evitar solapamientos y registrar logs?
- without_overlapping evita que una tarea inicie si ya hay otra instancia corriendo.
- Envía la salida de los comandos a logs con send_output_to y revisa los resultados en storage.
$schedule->command('inspire')
->daily()
->without_overlapping()
->send_output_to('storage/inspire.log');
- Agrega el archivo de log al gitignore para no subirlo al repositorio.
- Verifica en la carpeta storage que el archivo inspire.log se haya creado.
¿Qué buenas prácticas y próximos pasos aplicar?
Usa estos controles para ejecutar solo una instancia, tolerar mantenimientos y dejar huella de cada ejecución en logs. Así, enviar newsletters los lunes o recordatorios de verificación a diario será más confiable.
- Un solo cron dispara todo con php artisan schedule:run.
- Define frecuencia adecuada: diaria, minuto a minuto o cada cinco minutos.
- Limita a un servidor con on_server para evitar duplicados.
- Permite ejecución en mantenimiento con even_in_maintenance_mode.
- Evita solapamientos con without_overlapping.
- Centraliza logs en storage con send_output_to y exclúyelos con gitignore.
¿Te animas a ajustar el comando de newsletter con estas características y contar cómo lo harías en tu proyecto? Comparte tu enfoque en los comentarios.