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

3

19

I have a 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));
}
}

I created it following the official Laravel documentation. After that, I added \App\Console\Commands\statusUpdate::class to the Kernel.php file located in xampp\htdocs\project\app\Console.

Here's the code from the Kernel.php file:

<?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();
}
}

I then ran the following command using CMD on Windows:

php artisan schedule:run

Now, it works fine on my local server. The status field in my jobs table updates correctly to 1.

However, when I deployed this project to shared hosting and set up a CRON job in cPanel, it didn't work. The CRON job command is:

php /path/to/artisan schedule:run 1>> /dev/null 2>&1

In this hosted environment, the command isn't functioning. How can I solve this issue?

Broncobuster answered 29/8, 2015 at 6:59 Comment(6)
@michael yes I added my path, /home/username/public_html/projectfolder/artisan schedule:runBroncobuster
What is the configuration of your server? Tell OS and whether you have installed the CRONPucida
@Aditya Giri, server configuration means it is my shared hosting panel. yes OS already installed CRON.Broncobuster
I gave the answer below. Check that ones firstPucida
@AdityGiri, what is the different between my command php /path/to/artisan schedule:run 1>> /dev/null 2>&1 and your command php /var/www/artisan schedule:run 1>> /dev/null 2>&1! I already give my correct path in commandBroncobuster
You should try setting the complete absolute path to your php interpreter as well in your cron job command: /path/to/php /path/to/artisan schedule:run 1>> /dev/null 2>&1. You can get the absolute path to your php binary from the PHP_BINDIR reserved constant.Aversion
P
24

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:

https://static.mcmap.net/file/mcmap/ZG-AbGLDKwfpKnMxcF_AZVLQamyA/CYjI0.png

This is how it should look like.

Pucida answered 29/8, 2015 at 8:46 Comment(12)
what is the different between my command php /path/to/artisan schedule:run 1>> /dev/null 2>&1 and your command php /var/www/artisan schedule:run 1>> /dev/null 2>&1! i already give my correct path in command.Broncobuster
Well both are same. Let's say that you are running a server with Linux Environment. path/to/artisan means that you are linking to something like D:\xampp\path\to\artisan and obviously that is not the thing that you are looking for. You are linking to a file that never existed there. It will definitely work if you change the filepath. Tell me your project root directory path and I will tell you the correct command that you should input.Pucida
/home/belogin/public_html/jobssite/ this my path and and I tried using this /home/belogin/public_html/jobssite/artisan schedule:run 1>> /dev/null 2>&1 but not works.Broncobuster
Well I had a look at the documentation and the query should be like: * * * * * php /home/belogin/public_html/jobssite/artisan schedule:run 1>> /dev/null 2>&1Pucida
ok. when I give * * * * * php /home/belogin/public_html/jobssite/artisan schedule:run 1>> /dev/null 2>&1 in command box. it show bad command can't install in cron :( because I already give time using another option.Broncobuster
Well sorry. In your cron jobs do something like what I say. I am uploading one pic.Pucida
Ok. But your instruction are very helpful for me.Broncobuster
When I add cron using URL and URL hit my method it works fine.Broncobuster
Great to hear that. Did my answer help?Pucida
And yeah using URL means in what way? If you can hit your URL, then there is a great chance to hack your website.Pucida
Mark as answer if that helped you!Pucida
Which Hosting Company Are You Using? In the picMcphee
A
14

This worked fine for me

/usr/local/bin/php /path/to/artisan schedule:run >> /dev/null 2>&1
Annotate answered 10/9, 2016 at 16:58 Comment(0)
H
2

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');
}
Hyperbaton answered 22/8, 2018 at 5:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.