Laravel queue works only if started manually, not with Kernel command - php

I have the following Kernel.php:
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
\Log::info("hit");
$schedule->command('queue:restart')->everyFiveMinutes();
$schedule->command('queue:work')->name('queue_work_name')->withoutOverlapping()->runInBackground();
}
}
and a cron job set to run every minute... it prints correctly the "hit" in the logs, but no sign of the queue to be running... however, if i go to the terminal and run php artisan queue:work --once, it just works fine
What am i missing

Have you added this code to crontab?
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Above code checks for the scheduled commands and executes them.
To open crontab in linux use crontab -e.

Related

Laravel Cron Job not working on AWS lightsail LAMP

I am using Laravel 7 and AWS lightsail LAMP server for my application.
When I am running this
php artisan schedule:run
command manually it's working properly. But, when I am creating a cron job for this it's not working.
Here is my cron code as laravel documention:
* * * * * cd /opt/bitnami/apache/htdocs && php artisan schedule:run >> /dev/null 2>&1
Here is my app/Console/Karnel.php
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* #var array
*/
protected $commands = [
Commands\DeactiveCoupon::class
];
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('coupon:deactive')->everyMinute();
$schedule->command('queue:restart')->everyMinute();
$schedule->command('queue:work')->everyMinute();
}
/**
* Register the commands for the application.
*
* #return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
But, if I add this cron:
* * * * * cd /opt/bitnami/apache/htdocs && touch mytestfile.txt >> /dev/null 2>&1
It's creating a new file named mytestfile.txt
But, this Laravel command not working in cron!
* * * * * cd /opt/bitnami/apache/htdocs && php artisan schedule:run >> /dev/null 2>&1
How can I solve this?
Yes on live server you can register it through cron job
then you can register you command in cron job. you can ask you server provider for this command and then register like this
command look like this
/usr/local/bin/php /home/escuelar/your folder name/artisan schedule:run 1>> /dev/null 2>&1
After I run
which php
I got
/opt/bitnami/php/bin/php
and my cron code is:
* * * * * cd /opt/bitnami/apache/htdocs && /opt/bitnami/php/bin/php artisan schedule:run >> /dev/null 2>&1
It's working for me
Thanks #apokryfos bro

Laravel 5 schedule issues - php artisan schedule:run works but actual schedule does not

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

Lumen task scheduling everyMinute isn't working?

I have setup a command that generates a PDF with some stats and it sends the pdf as an attachment in an email. The command works great when I run t manually in my console.
php artisan send:report
Now I am trying to setup that this command is executed every last day of the month. To test I have setup the scheduler to everyMinute but when I run php artisan schedule:run the email is sent only 1 time when I run the command and not every minute.
Am I doing something wrong here?
My Kernel.php file in Lumen
<?php
namespace App\Console;
use App\Console\Commands\SendReport;
use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* #var array
*/
protected $commands = [
SendReport::class,
];
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('report:send')->everyMinute();
}
}
Am I missing something ?
Any help is greatly appreciated !
Many thanks in advance !
Please ensure this is on your server Cron entries as described in the docs
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
I think you need to set the entry in the crontab. See here: https://laravel.com/docs/5.4/scheduling and scroll down to Starting The Scheduler.
Need to add a cronjob to run the schedule:run command:
Found answer in this issue.

Set schedule cron job in Laravel

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.

How to run artisan command schedule:run on hosting server? (Laravel)

I have statusUpdate.php file in the
xampp\htdocs\project\app\Console\Commands folder.
statusUpdate.php :
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use DB;
class statusUpdate extends Command
{
/**
* The name and signature of the console command.
*
* #var string
*/
protected $signature = 'status:update';
/**
* The console command description.
*
* #var string
*/
protected $description = 'Update Job status daily';
/**
* Create a new command instance.
*
* #return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* #return mixed
*/
public function handle()
{
$affected = DB::table('jobs')->update(array('status' => 1));
}
}
It is created by the following Laravel official documentation.
Then I was added \App\Console\Commands\statusUpdate::class, class in Kernel.php on xampp\htdocs\project\app\Console folder.
Here is the karnel.php file code:
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* #var array
*/
protected $commands = [
\App\Console\Commands\statusUpdate::class,
];
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('status:update')
->everyFiveMinutes();
}
}
Then I was run
php artisan schedule:run command using CMD on windows 7.
Now it is working fine(in local server). My jobs table status field is updated properly by 1.
But when I was deployed this project on the shared hosting and added a CRON command for my server in cPanel:
Cron job command is like this : php /path/to/artisan schedule:run 1>> /dev/null 2>&1
Now in this case command not working & this is the problem. how can I solve it?
Well. I am giving you the answer as per what you have said.
Cron job command is like this : php /path/to/artisan schedule:run 1>> /dev/null 2>&1
The path should be locating the artisan file in the server. Like this:
Let's say your artisan file location is /var/www/artisan, then the simple answer could be do like this:
php /var/www/artisan schedule:run 1>> /dev/null 2>&1
Just check if that works. Thank You!
UPDATE:
This is how it should look like.
This worked fine for me
/usr/local/bin/php /path/to/artisan schedule:run >> /dev/null 2>&1
You should add the command from the cPanel server as
/usr/local/bin/php /home/xyz/public_html/artisan schedule:run 1>> /home/xyz/public_html/log_laravel 2>&1
This will keep all the logs in /home/xyz/public_html/log_laravel
Running scheduled command: '/opt/cpanel/ea-php71/root/usr/bin/php' 'artisan' SyncAPIOrders:orders > '/dev/null' 2>&1
In my case cron Job was not working, if you are about to schedule the command as once a day (i.e., 00:00) iff, same time is not reflected in a $schedule->command(); object
If the commands were incorrect, I used to get this warning in my Email as
PHP Warning: Module 'magickwand' already loaded in Unknown on line 0
Status: 404 Not Found
X-Powered-By: PHP/5.6.37
Content-type: text/html; charset=UTF-8
No input file specified.
In Kernel.php you should specify
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('SyncAPIOrders:orders')
->timezone('Asia/Kolkata')
->dailyAt('00:00');
}

Categories