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.

Solución:

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.