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.
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.
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.
Muy buena la clase, solo un detallito, el archivo .log generado es mejor que este adentro de logs en la carpeta storage, ya que esta carpeta ya esta ignorada y así no tenemos que agregarlo al .gitignore.
***** cd /path-to-your-project && php artisan schedule:run >>/dev/null2>&1
Tambien puedes considerar usar queues:
Si estas trabajando en desarrollo puedes probar tus comandos sin usar un cron con el comando:
php artisan queue:work
Esto correra internamente durante N tiempo comandos y Jobs pero deben tomar en cuenta implementar el trait "shouldQueue" para mandar todo a la pila de tareas.
En produccion necesitaras configurar un supervisor (si usas ubuntu no es mas que un apt-get) :
Que mal que el equipo de Platzi no lea los comentarios ,
hace 2 años que las personas escribieron los comentarios y es la hora y no se ha actualizado lastimosamente voy a deja el curso
No conocia el modo mantenimiento y tengo varios an/os trabajando con Laravel...el curso ha sido bastante interesante.
es necesario el cron del server no entendi esa parte final
Si es necesario pero todo demas lo controla desde el schedule
Si, el cron es necesario en el servidor para que pueda ejecutar los comandos definidos en el Schedule.
Sí estan siguiendo el curso con windows/laragon o xampp (como yo), les recomendaría tomar el curso de docker para que puedan lanzar una aplicación que corra en el stack LEMP y así pode usar crontab, si no saben usar crontab les recomiendo el curso de introducción a la línea de comandos.
buena
Para que no tengan que configurar ningún crontab para que se ejecuten sus comandos pueden usar el comando php artisan schedule:work de Laravel.
la verdad si falto que completara la explicación , haciendo el crontab
Este curso no sirve de mucho, muy mala explicación.