Comment configurer l’exécution automatique d’une tâche avec Laravel ?

David Yao
5 min readNov 12, 2018

Hello #davidnation, j’espère que vous vous portez bien. Pour cet article, j’ai jugé bon de partager avec vous une nouvelle expérience que j’ai acquise avec le framework Laravel: la configuration d’une tâche cron avec laravel.

Mais c’est quoi au juste une tâche Cron ?

Qui n’a jamais eu envie de ne pas travailler et de laisser quelqu’un faire le boulot pour soit ? Bonne nouvelle ! C’est possible ! Nous appelons ce héros des temps modernes les tâches Cron !

C’est vrai qu’elles ne vous permettront pas de vous reposer sur vos lauriers en attendant qu’arrive l’heure du repas mais concernant l’informatique, vous aller pouvoir faire de grandes choses :

  • Sauvegarder vos bases de données automatiquement
  • Envoyer des rappels à vos clients pour des factures impayées
  • Générer vos statistiques et vous envoyer le tout en PDF par mail
  • Nettoyer votre forum tous les jours à 1h15 du matin
  • Et tellement d’autres choses…
  • etc.

De manière générale, vous allez être en mesure de programmer des tâches répétées sur votre hébergement avec des scripts (dans notre cas, des scripts PHP). Alors comment utiliser Laravel pour dire à son serveur quoi faire à telle période ?

Exigences:

  1. Éditeur de code Atom / Visual Studio ou Sublime.
  2. Connaitre Laravel (5 et plus) et PHP.

Premièrement, nous allons commencer par créer un nouveau projet, comme ci-dessous à partir de notre ligne de commande.

composer create-project — prefer-dist laravel/laravel blog

Une fois l’installation terminée, placez-vous dans le dossier de votre projet racine et créez une nouvelle tâche qui sera exécutée ultérieurement à une heure donnée. J’appelle le mien DeleteInActiveUsers, vous pouvez nommer le vôtre comme vous le souhaitez.

php artisan make:command DeleteInActiveUsers

L’action ci-dessus va créer un fichier contenant les détails de notre action ou commande à exécuter par Cron dans “..appConsoleCommandes”, qui se nomme “DeleteInActiveUsers.php”, et ressemble à ça.

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;

class DeleteInActiveUsers extends Command
{
/**
**_ The name and signature of the console command.
_**
**_ @var string
_**/
protected $signature = 'command:name';

/**
_ 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()
{
//
}
}

use DB; vous permet d’importer des fonctionnalités de la base de données Laravel telles que sélectionner, insérer, supprimer .., mais le fichier n’est pas fourni avec. Il faudra donc l’importer.

protected $ signature = ‘DeleteInActiveUsers: deleteusers’; inclut le nom et la signature de la commande. C’est ce qui sera appelé lors de l’exécution de la commande pour effectuer la tâche contenue.

$description; En gros, c’est la description de ce que votre commande va faire.

function handle Dans cette partie, c’est là que sera placé votre code magique pour faire quelque chose, par exemple: DB :: table (‘users’) -> delete (4);

Maintenant, remplacez les sections ci-dessus comme je l’ai fait:

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;

use DB;

class DeleteInActiveUsers extends Command
{
/**
**_ The name and signature of the console command.
_**
**_ @var string
_**/
protected $signature = 'DeleteInActiveUsers:deleteusers';

/**
_ The console command description.
_
_ @var string
_/
protected $description = 'Delete inactive users';

/**
**_ Create a new command instance.
_**
**_ @return void
_**/
public function construct()
{
parent::construct();
}

/**
_ Execute the console command.
_
_ @return mixed
_/
public function handle()
{
DB::table('users')->delete(4);
}

Allez dans le dossier appConsole, vous verrez le fichier kernel.php qui ressemble à ceci

<?php

namespace AppConsole;

use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
/**
**_ The Artisan commands provided by your application.
_**
**_ @var array
_**/
protected $commands = **[**

];

/**
_ Define the application's command schedule.
_
_ @param IlluminateConsoleSchedulingSchedule $schedule
_ @return void
_/
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')
->hourly();
}

/**
_ Register the Closure based commands for the application.
_
_ @return void
*/
protected function commands()
{
require base_path('routes/console.php');
}
}

Changez-le comme je l’ai fait ci-dessous et assurez-vous de porter une attention particulière aux modifications apportées à chaque section:

<?php

namespace AppConsole;

use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
/**
**_ The Artisan commands provided by your application.
_**
**_ @var array
_**/
protected $commands = **[**

//This is the line of code added, at the end, we the have class name of DeleteInActiveUsers.php inside appconsolecommands
'AppConsoleCommandsDeleteInActiveUsers',
];

/**
_ Define the application's command schedule.
_
_ @param IlluminateConsoleSchedulingSchedule $schedule
_ @return void
_/
protected function schedule(Schedule $schedule)
{
//insert name and signature of you command and define the time of excusion
$schedule->command('DeleteInActiveUsers:deleteusers')
->everyMinute();
}

/**
_ Register the Closure based commands for the application.
_
_ @return void
*/
protected function commands()
{
require base_path('routes/console.php');
}
}

Si vous lancez “php artisan list” dans votre terminal de commande, vous devriez pouvoir voir que votre commande a été enregistrée, le nom de la commande apparaîtra avec la signature, ce qui nous prouve que tout va bien.

Une fois que vous avez terminé, assurez-vous que vous êtes connecté à une base de données et que vous avez une table d’utilisateurs avec cet ID particulier. Puis exécutez cette commande sur votre terminal.

Ne vous rappelez pas notre signature maintenant. Après la commande ci-dessus, l’utilisateur ayant l’ID 4 dans cette table sera supprimé après l’heure que vous avez définie pour l’exécution de la commande, dont dans ce cas, chaque minute

Que se passe-t-il si vous souhaitez que le travail périodique soit exécuté automatiquement sans avoir à lancer à l’aide de la commande ?

allez sur votre terminal et lancez cette commande;

crontab -e

Cela va ouvrir le fichier crontab du serveur, coller ce code à l’intérieur, le sauvegarder et quitter.

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

Et voilà, j’espère que ça vous aidera. Pour en savoir un peu plus sur Laravel, n’hésitez pas à consulter cette page.

  • Merci d’avoir lu !
  • Si vous avez aimé cet article,
  • Faites un coucou sur : Instagram | Facebook | Twitter |
  • Avez-vous besoin d’aide pour votre projet web ? Ecrivez moi à l’adresse suivante : david@oschool.ci

Originally published at Deviens développeur web.

--

--

David Yao

Full Stack Developer. Remote work enthusiast | React & Redux | Laravel | Ruby On Rails | Symfony