This question already has an answer here:
Command schedule in Laravel
(1 answer)
Closed 5 years ago.
I have a problem with laravel command
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Foundation\Bus\DispatchesJobs;
class Kernel extends ConsoleKernel
{
use DispatchesJobs;
protected $commands = [
Commands\checkDeposits::class,
];
protected function schedule(Schedule $schedule)
{
$schedule->command('check:deposits')->everyFiveMinutes();
}
}
The command is not executed every five minutes ...
Its not executed at all. If i use php artisan check:deposits it works.
Why the command is not scheduled to run every 5 minutes ?
Also tried php artisan schedule:run
output : No scheduled commands are ready to run.
Add the following line to the crontab of your server:
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
This will execute the Laravel command scheduler every minute.
Also, include the class of your command in Kernel.php (case sensitive):
use Commands\CheckDeposits;
And include it in the $commands array:
protected $commands = [
CheckDeposits::class,
];
Related
Laravel version 5.7, PHP version 7.2 running on Apache2
The command in my crontab is as follows:
* * * * * php /var/www/dev-site/artisan schedule:run >> /dev/null 2>&1
My kernel is as follows:
<?php
namespace App\Console;
use App\Console\Commands\ImportInvoiceBatch;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected $commands = [
ImportInvoiceBatch::class,
];
protected function schedule(Schedule $schedule)
{
$schedule->command('import:invoice-batch')->everyMinute()->withoutOverlapping();
}
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
Running my defined command as "php artisan import:invoice-batch" works correctly, and even running "php artisan schedule:run" recognizes everything and runs the task as expected, but the scheduler is not being executed ever minute as should be happening. Is there anything I am missing? Thanks in advance.
Try to change working directory to app root before running artisan:
* * * * * cd /var/www/dev-site/artisan && php artisan schedule:run >> /dev/null 2>&1
Also you could try to add output path for debuging:
* * * * * cd /var/www/dev-site/artisan && php artisan schedule:run >> /var/log/crontab/artisan.log 2>&1
Trying to do task scheduling but not working properly. I set the time and wrote the commands but not running.
Here is my commands;
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\allestates;
protected $signature = 'bot:mitsui';
Also my Kernel is here:
protected $commands = [
//
Commands\mitsui::class,
];
protected function schedule(Schedule $schedule)
{
$schedule->command('bot:mitsui')->everyFiveMinutes();
}
What am I missing here? Thanks for helping me out!
Are you running the schedule cron.? You need to add this into your cpanel crons or cronjob.
php {project_path}/artisan schedule:run > /dev/null 2>&1
If not add the above command to your cron jobs and run it everyminute.
Here the steps if you have root access,
crontab -e
//Add follow line to crontab
* * * * * php {project_path}/artisan schedule:run >> /dev/null 2>&1
I have a Laravel 5.5 installation and am trying to get the scheduler to run. I have the following cron job running and it is working fine.
* * * * * php /var/www/html/project1/artisan schedule:run >> /var/www/html/project1/schedule.log
The cron job is outputting to a log file and I get the same result in cron as I get if I run artisan schedule:run from the command line. The result is always the same and says no scheduled commands are ready to run. The problem doesn't appear to be with cron as the job runs and I get output.
I configured the simple artisan inspire command to run in the Laravel schedule function. I can run the inspire command on the command line with php artisan inspire and it works fine. I understand all the posts about timezone but it is not a timezone issue, the command simply doesn't run ever. I am also not using withoutOverlapping(), so that is not my problem. So I have a cron job running every minute to run the laravel schedule and it does output to my log, which indicates that cron and Laravel are communicating. I think the problem must be that Laravel doesn't think there is a command that needs to be executed. I don't know how to debug this any further so any help would be greatly appreciated.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected $commands = [
//
];
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')
->everyMinute();
}
protected function commands()
{
require base_path('routes/console.php');
}
}
I have set a cron job
* * * * * php /var/www/html/laravel schedule:run 1>> /var/www/html/log_laravel 2>&1
This is what I have set in app\console\Kernel.php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Http\Controllers\DataController;
class Kernel extends ConsoleKernel
{
protected $commands = [
];
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
DataController::get_data();
})->everyMinute();
}
}
Is that it? In docs there isn't anything else but this is not working.
DataController#get_data should perfom some updates in database (I can also call this manually by going to http//www.site.com/public/data/get_data. How can I debug this? I don't have anything in log file in storage/logs and my log_laravel for Cron job is empty.
You need to reference the path to artisan.php script:
* * * * * php /var/www/html/laravel/artisan schedule:run 1>> /var/www/html/log_laravel 2>&1
I do not recommend writing output to any logs, this will run every minute, and will kill your disk space.
I am not sure why cron doesn't for Laravel artisan commands. But when I launch it manually like php artisan my:command it works.
I have put command in Kernel:
protected function schedule(Schedule $schedule)
{
$schedule->command('my:command')->everyMinute();
}
Also when I run php artisan schedule:run it says: No scheduled commands are ready to run.
Crontab looks like this:
* * * * * php /project/artisan schedule:run
At first I thought maybe cron itself doesn't work, but it executes php files not related to artisan.
I am using PHP7 if it changes anything.
UPDATED (cron artisan commands work, but schedule dont)
Cron command works (log has been saved in storage/app folder)
* * * * * php /project/artisan command:test
Cron schedule doesn't work
* * * * * php /project/artisan schedule:run
test.php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Storage;
use Carbon\Carbon;
class test extends Command
{
protected $signature = 'command:test';
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
public function handle()
{
Storage::prepend('test.log', Carbon::now());
}
}
Kernel.php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected $commands = [
Commands\test::class,
];
protected function schedule(Schedule $schedule)
{
$schedule->command('command:test')->everyMinute();
}
}