Hola!, cuando trabajamos en un proyecto Laravel siempre saldrán tareas automatizadas, y que mejor que utilizar el Task Scheduling de Laravel, donde personalizamos cuando y que comando se ejecutará, sean comandos de Laravel como tal o comandos personalizados, todo funciona bien en local (en mi caso no probaba el cron dado que uso windows) hasta que llega el día en que lo subimos a nuestro servidor agregamos el cron principal a nuestro sistema:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Pero a la hora de probar un comando, que por ejemplo, se debe ejecutar diariamente a las 00:01 como sería este caso de un email de cumpleaños a nuestros usuarios:
$schedule->command('email:birthday')->dailyAt('00:01')->withoutOverlapping();
da la casualidad que a la hora indicada nada pasa, el email no se envía a la hora indicada y si hacemos un:
sudo grep CRON /var/log/syslog
Vemos que nuestro comando principal artisan schedule:run >> /dev/null 2>&1 se esta ejecutando minuto a minuto, pero el email no aparece.
En mi caso el problema era que en mi archivo de configuración config/app.php
NO había especificado el Timezone correcto, éste se encontraba en UTC, y no en el que correspondia a mi servidor, que debiera ser 'America/Santiago' en mi caso, para terminar, la linea en app.php quedaría en mi caso:
'timezone' => 'America/Santiago',
Y porfin!!, una vez que modifique la hora de mi task a un minuto cercano al actual (para no esperar 24 horas xD!) aparecio el email de cumpleaños
Espero a más de alguno le sirva.
Toma tu tiempo para entender cada concepto antes de continuar con el siguiente.
Practica los ejemplos en tu propio entorno de desarrollo para mejor comprensión.
No dudes en revisar los recursos adicionales mencionados en el artículo.
Page loaded in 28.15 ms