web-dev-qa-db-fra.com

Comment exécuter une commande artisanale: exécutée sur un serveur d'hébergement? (Laravel)

J'ai le fichier statusUpdate.php dans le dossier Xampp\htdocs\project\app\Console\Commands.

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

Il est créé par la documentation officielle suivante de Laravel . Ensuite, j’ai ajouté la classe \App\Console\Commands\statusUpdate::class, dans Kernel.php dans le dossier xampp\htdocs\project\app\Console.

Voici le code du fichier 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 = [
        \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();
}
}

Puis j'ai couru 

php artisan schedule: commande d'exécution utilisant CMD sur Windows 7.

Maintenant cela fonctionne bien (sur le serveur local). Le champ d'état de ma table de tâches est mis à jour correctement par 1.

Mais lorsque j'ai déployé ce projet sur l'hébergement partagé et ajouté une commande CRON pour mon serveur dans cPanel:

La commande de travail cron ressemble à ceci: php /path/to/artisan schedule:run 1>> /dev/null 2>&1

Maintenant, dans ce cas, la commande ne fonctionne pas et c’est le problème. Comment puis-je le résoudre?

15
Inspire Shahin

Bien. Je vous donne la réponse selon ce que vous avez dit.

La commande de travail cron ressemble à ceci: php /path/to/artisan schedule:run 1>> /dev/null 2>&1

Le chemin devrait localiser le fichier artisan sur le serveur. Comme ça:

Supposons que votre fichier artisan est /var/www/artisan, alors la réponse simple pourrait être la suivante:

php /var/www/artisan schedule:run 1>> /dev/null 2>&1

Il suffit de vérifier si cela fonctionne. Je vous remercie!

METTRE &AGRAVE; JOUR:

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

Voici comment cela devrait ressembler.

12
Aditya Giri

CA marchait bien pour moi

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

Vous devez ajouter la commande du serveur cPanel en tant que

/usr/local/bin/php /home/xyz/public_html/artisan schedule:run 1>> /home/xyz/public_html/log_laravel 2>&1

Cela gardera tous les journaux dans /home/xyz/public_html/log_laravel

Running scheduled command: '/opt/cpanel/ea-php71/root/usr/bin/php' 'artisan' SyncAPIOrders:orders > '/dev/null' 2>&1

Dans mon cas, le travail de cron ne fonctionnait pas, si vous êtes sur le point de planifier la commande une fois par jour (c.-à-d., 00:00) si le même temps est pas reflété dans un objet $schedule->command();

Si les commandes étaient incorrectes, je recevais cet avertissement dans mon courrier électronique en tant que

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.

Dans Kernel.php, vous devez spécifier 

/**
 * 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');
}
1
Nishanth ॐ