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

46,451

Solution 1

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:

http://i.imgur.com/wVAWAHK.png

This is how it should look like.

Solution 2

This worked fine for me

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

Solution 3

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');
}
Share:
46,451
Inspire Shahin
Author by

Inspire Shahin

I have experience with most programming languages such as PHP, SQL, Javascript. In the recent years I've mostly programmed PHP, Javascript and custom web applications. PHP Frameworks I've worked with: Laravel, CodeIgniter.

Updated on July 05, 2022

Comments

  • Inspire Shahin
    Inspire Shahin almost 2 years

    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?

  • Inspire Shahin
    Inspire Shahin over 8 years
    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.
  • Aditya Giri
    Aditya Giri over 8 years
    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.
  • Inspire Shahin
    Inspire Shahin over 8 years
    /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.
  • Aditya Giri
    Aditya Giri over 8 years
    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>&1
  • Inspire Shahin
    Inspire Shahin over 8 years
    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.
  • Aditya Giri
    Aditya Giri over 8 years
    Well sorry. In your cron jobs do something like what I say. I am uploading one pic.
  • Inspire Shahin
    Inspire Shahin over 8 years
    Ok. But your instruction are very helpful for me.
  • Inspire Shahin
    Inspire Shahin over 8 years
    When I add cron using URL and URL hit my method it works fine.
  • Aditya Giri
    Aditya Giri over 8 years
    Great to hear that. Did my answer help?
  • Aditya Giri
    Aditya Giri over 8 years
    And yeah using URL means in what way? If you can hit your URL, then there is a great chance to hack your website.
  • Aditya Giri
    Aditya Giri over 8 years
    Mark as answer if that helped you!
  • Zymawy
    Zymawy over 5 years
    Which Hosting Company Are You Using? In the pic