Last day I updated my Laravel app from version 8 to 9, all my scheduled command in Console Kernel has run in another environment like "production". Which causes my system didn't work as expected.

Example, I have 2-3 enviroment which I run cronjob like

* * * * * php artisan schedule:run --env=hello
* * * * * php artisan schedule:run --env=world

But all sub scheduled commands has been run with "production" instead of "hello" or "world"

So this is my fix, I created a lambda function which pass current environment to the child command.

class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
// Added 2 lines to get lamda function
$env = app()->environment();
$schedule_command = fn ($cmd) => $schedule->command($cmd, ['--env' => $env]);

// Then schedule using new lambda function
$schedule_command('check_product_stock')->everyTenMinutes();
$schedule_command('run_job_queue')->everyMinute();
$schedule_command('clean_old_data')->dailyAt('00:25');
}

protected function commands()
{
$this->load(__DIR__ . '/Commands');

require base_path('routes/console.php');
}
}

Enjoy ! :) Hope it works for you !