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

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');
}

Related

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

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.

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

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.

Cron job running every time whenever i run the artisan command

I have a task scheduled to run an artisan command, and whenever i run artisan command it is executing every time irrespective of time i have given to the cron job.
Here is the console i'm using
class CronJobConsole extends Command
{
/**
* The name and signature of the console command.
*
* #var string
*/
protected $signature = 'sms:note';
/**
* The console command description.
*
* #var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* #return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* #return mixed
*/
public function handle()
{
//executing function;
}
$this->info('Remainder SMS send successfully !!');
}
}
and this is my console/kernel.php file
class Kernel extends ConsoleKernel
{
protected $commands = [
\App\Console\Commands\Inspire::class,
\App\Console\Commands\FileEntryData::class,
\App\Console\Commands\CronJobConsole::class,
];
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('sms:note')->dailyAt('19:00')->sendOutputTo('cronjob-result.php');
}
}
when i run the php artisan sms:note it is executing every time. I want it to execute on particular time that i have gven.
Please help me out.
This problem, as you specify it, is just artisan's normal behaviour.
You have scheduled the command, so it will be executed on the specified time driven by Laravels internal scheduler (read below cronjob). But you can also manually execute the command, by entering it in CLI.
Note: executing your command manually has nothing to do with artisan's scheduler. The scheduler only executes this command whenever you see fit.
So the command you are looking for is:
php artisan schedule:run
This commands loops through the registered commands on the specified time, so it will only run your command when the time is ready.
To make sure Laravel executes your command when it's time, create a cronjob (on your server) to run the php artisan schedule:run command every minute, Laravel takes care of the rest.
From the docs (insert in crontab):
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Goodluck!

Configure Laravel task scheduling with Crontab

I've create a laravel task and added to my crontab file
app/Console/Kernel.php
<?php
namespace App\Console;
use Carbon;
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\Inspire::class,
];
/**
* Define the application's command schedule.
*
* #param \Illuminate\Console\Scheduling\Schedule $schedule
* #return void
*/
protected function schedule(Schedule $schedule)
{
$now = Carbon\Carbon::now('America/New_York');
$dt = Carbon\Carbon::parse($now);
$time_start = $dt->toTimeString();
$dt = str_replace('-','_',$dt);
$dt = str_replace(' ','_',$dt);
$dt = str_replace('/',':',$dt);
$schedule->exec('curl '.env('APP_URL').'fbwifi/acl_update')->everyMinute()
->sendOutputTo(public_path().'/tasks/log_'.$dt.'.txt');
}
}
crontab file
* * * * * /usr/local/bin/php artisan schedule:run
* * * * * php artisan schedule:run
Result
For some reasons my crontab doesn't trigger.
After 5 minutes, I don't see anything generated in my public/tasks/ folder.
I even tried to put the full path to my php.
Am I missing anything? How would one go about debugging this?
In your crontab you need to set the path to point to the artisan file in your project's root directory.
* * * * * php /path/to/project/artisan schedule:run
If you're having trouble finding the absolute path to your project route then open terminal, cd into your project's route directory and then use the pwd command, which will give you the absolute directory.
So for example:
$ cd MyUser/dev/project
$ pwd
Will output something like
/Users/MyUser/dev/project
Then your cronjob would look like
* * * * * php /Users/MyUser/dev/project/artisan schedule:run
Also try restarting your cron daemon. I've found that helps sometimes when things don't run for me.

Categories