Estou enfrentando dificuldades com a configuração de tarefas agendadas no Laravel usando schedule com sail
Configuração Atual:
Laravel Version: 10
PHP: 8.3
Cron Configuração no Container:
* * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1
Comando Manual no Container:
docker exec -it <container_id> /bin/sh
cd /var/www/html
php artisan schedule:run
Arquivo app/Console/Kernel.php
<?php
namespace AppConsole;
use AppJobsProcessScheduledTransactionsJob;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
use IlluminateSupportFacadesLog;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule): void
{
Log::info('Scheduling tasks');
// $schedule->call(function () {
// ProcessScheduledTransactionsJob::dispatch();
// })->everyMinute();
$schedule->call(function () {
Log::info('Scheduled task executed successfully.');
})->everyMinute();
$schedule->job(new AppJobsSimpleJob)->everyMinute();
}
/**
* Register the commands for the application.
*/
protected function commands(): void
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
}
Comportamento Observado:
Quando rodo o list só apresenta o commando da roda commands padrão, nada que eu coloque no schedule é lido:
./vendor/bin/sail artisan schedule:
list
0 * * * * php artisan inspire ……………………….. Next Due: 56 minutes from now
O cron job parece estar executando, mas o comando php artisan schedule:run não está executando as tarefas agendadas.
A saída do comando manualmente (php artisan schedule:run) não mostra nenhuma tarefa executada.
O arquivo de log especificado (/var/log/cron.log) está vazio ou não é criado.
Passos que Já Tentei:
Verifiquei o caminho e permissões dos diretórios.
Testei o comando manualmente dentro do container.
Certifiquei-me de que o cron daemon está em execução no container.
Ajustei a configuração do cron para redirecionar a saída para um arquivo de log para depuração.
Verifiquei a configuração do agendamento no Kernel.php do Laravel.
Alguém já enfrentou um problema similar ao configurar cron jobs para tarefas agendadas no Laravel dentro de um container Docker?
Quais são os passos adicionais que eu deveria tentar para resolver este problema?
Há alguma configuração específica do Laravel ou Docker que eu possa ter deixado passar?
Arquivo .env:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:iRrC0za+gqerQy4V6XagB7N7perujhvyKUwuoIfGYGw=
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=http://localhost:8000
FRONTEND_URL=http://localhost:3000
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
BCRYPT_ROUNDS=12
LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
CACHE_STORE=database
CACHE_PREFIX=
MEMCACHED_HOST=127.0.0.1
REDIS_CLIENT=phpredis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}"
SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://meilisearch:7700
MEILISEARCH_NO_ANALYTICS=false
Composer.json
Dockerfile: