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.
Page loaded in 27.13 ms