Cron Scheduler Pro est une extension exclusivement disponible pour Magento 2 inspirée librement de la version pour Magento 1 de AOE Scheduler (https://github.com/AOEpeople/Aoe_Scheduler ).
Cron Scheduler Pro rend la gestion des tâches cron dans Magento 2 plus simple et plus intelligible. Néanmoins cette extension ne dispense pas de configurer la tâche cron principale pour Magento 2 au niveau du serveur. Pour plus d'informations sur la configuration des tâches cron au niveau du serveur, veuillez vous référer au guide officiel de Magento : http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-cron.html
Le mécanisme des tâches cron dans Magento nécessite de comprendre quelques principes de bases :
- la tâche planifiée coté serveur doit déclencher régulièrement, idéalement toutes les minutes.
bin/magento cron:run
- La commande ci-dessus analyse chaque processus (configuré dans les différents modules) actif sur le site web et pour chacun d'entre eux, elle programme les tâches cron pour les heures à venir selon les préférences dans :
Storesconfigurationsystem cron - Puis, la même commande exécute les tâches qui correspondent à l'heure actuelle, marque comme ratées les tâches trop anciennes et nettoie l'historique des tâches.
Configurer Cron Scheduler de manière générale
Cron Scheduler ne nécessite que quelques réglages.
Notification par email
Définissez si vous souhaitez recevoir ou non les alertes par email lorsqu'une tâche cron génère une erreur.
Lorsque vous activez cette option, il vous faut ensuite compléter les champs suivants.
Expéditeur de l'email
[email protected]
Nom de l'expéditeur
Cron Scheduler
Emails de destination
[email protected]
Objet de l'email
Vous pouvez utiliser les placeholders suivants :
- {{job_code}} : code du job
- {{executed_at}} : heure d'exécution
- {{message}} : message d'erreur
The cron task {{job_code}} failed
Contenu de l'email
Vous pouvez utiliser les placeholders suivants :
- {{job_code}} : code du job
- {{executed_at}} : heure d'exécution
- {{message}} : message d'erreur
- {{file}} : origine de l'erreur
- {{line}} : ligne dans le fichier d'origine
- {{origin}} : backoffice Magento ou ligne de commande ou API
- {{user}} : nom de l'utilisateur du backoffice Magento ou ligne de commande
- {{ip}} : IP de l'utilisateur
- {{full_trace}} : tous les placeholders ci-dessus
Message : {{message}}
Notification en backoffice
Définissez si vous souhaitez afficher ou non les alertes dans votre backoffice Magento lorsqu'une tâche cron génère une erreur.
Lorsque vous activez cette option, il vous faut ensuite compléter les champs suivants.
Objet de la notification
Vous pouvez utiliser les placeholders suivants :
- {{job_code}} : code du job
- {{executed_at}} : heure d'exécution
- {{message}} : message d'erreur
The cron task {{job_code}} failed
Contenu de la notification
Vous pouvez utiliser les placeholders suivants :
- {{job_code}} : code du job
- {{executed_at}} : heure d'exécution
- {{message}} : message d'erreur
- {{file}} : origine de l'erreur
- {{line}} : ligne dans le fichier d'origine
- {{origin}} : backoffice Magento ou ligne de commande ou API
- {{user}} : nom de l'utilisateur du backoffice Magento ou ligne de commande
- {{ip}} : ip de l'utilisateur
- {{full_trace}} : tous les placeholders ci-dessus
Message : {{message}}
Les vues Cron Scheduler
Cron Scheduler offre 3 vues distinctes permettant de visualiser et d'administrer les tâches crons.
- Timeline : une vue chronologique des tâches exécutées et des tâches programmées
- Task list : une vue sous forme de grille des tâches exécutées et des tâches programmées
- Job configuration : une liste de toutes les processus qui génèrent des tâches cron
Chronologie des tâches
Pour afficher la chronologie, allez dans :
systemcron SchedulerTasks Timeline
La time line présente l'ensemble des tâches exécutées et des tâches programmées.
Vous obtiendrez des informations supplémentaires au survol de chaque marqueur.
Liste de tâches
Pour afficher la liste des tâches, allez dans :
systemcron SchedulerTasks list
La grille liste l'ensemble des tâches exécutées et des tâches programmées.
Vous obtiendrez des informations supplémentaires en cliquant sur View More dans la colonne de droite.
Configuration des cron jobs
Pour afficher la liste des processus, allez dans :
systemcron Schedulerjobs Configuration
Cette grille liste l'ensemble des processus qui génèrent des tâches cron.
Créer un nouveau processus
Vous pouvez créer de nouveaux processus grâce à Cron Scheduler sans avoir besoin de créer de nouveaux modules.
Cliquez sur Create a new job
Puis compléter le formulaire
- Code
Le code unique du processus. - Group
Groupe auquel appartient le processus. - Instance
La classe PHP utilisée par le processus. - Methode
La méthode PHP associée à la classe PHP. - Cron expression
La fréquence des tâches générée.
La fréquence est représentée par une expression cron.
En savoir plus : https://en.wikipedia.org/wiki/Cron - Status
Le statut de la tâche : activé ou désactivé.
Un processus désactivé ne générera plus de tâche cron.
Enregistrez en cliquant sur save.
- Le nouveau processus apparaît avec une icone utilisateur.
- Les processus système apparaissent avec une icone engrenage.
Voici un exemple de script exécuté par un processus cron personnalisé dans app/code/Cron.php
<?php
namespace Cron;
class Test {
public function execute($schedule) {
$om = \Magento\Framework\App\ObjectManager::getInstance();
try{
// YOUR LOGIC HERE
$message="Test processus has run!";
}
catch(\exception $e){
$message=$e->getMessage();
}
$schedule->setMessages($message);
$schedule->save();
}
}
Editer un processus
Vous pouvez ensuite modifier les informations suivantes :
- le groupe auquel appartient le processus.
- l'instance : la classe PHP utilisée par le processus.
- la méthode PHP associée à la classe PHP.
- la fréquence des tâches générées.
La fréquence est représentée par une expression cron (https://en.wikipedia.org/wiki/Cron). - le statut de la tâche : activé ou désactivé.
Un processus désactivé ne générera plus de tâche cron.
Supprimer un processus
Exécuter les tâches & générer la planification avec Cron Scheduler
Depuis le backoffice
A tout moment vous pouvez exécuter et planifier les tâches cron globalement de la même manière que la ligne de commande
bin/magento cron:run
Exécuter
Il suffit de cliquer sur le bouton run task & generate schedule depuis :
systemcron Schedulerjobs Configuration
Vous pouvez également exécuter chaque processus indépendamment en cliquant sur run now dans la colonne de droite de la grille Jobs Configuration.
Planifier
Vous pouvez également planifier un processus. L'exécution sera faite dans la minute.
Depuis les lignes de commandes
Cron Scheduler inclut de nouvelles lignes de commande pour la gestion des tâches cron via CLI.
- Lister l'ensemble des tâches cron :
wyomind:cronscheduler:task:list
- Afficher le détail d'une tâche cron :
wyomind:cronscheduler:task:show task_id
- Lister tous les processus :
wyomind:cronscheduler:job:list
- Exécuter un processus spécifique :
wyomind:cronscheduler:run job_code
Depuis l'API
Cron Scheduler inclut également une API pour exécuter chaque processus indépendamment.
Le WSDL est disponible à l'adresse suivante :
http://demo2.wyomind.com/index.php/soap/default?wsdl&services=wyomindCronSchedulerProCronV1
Voici un exemple d'utilisation de l'API au format SOAP
<html>
<head>
<title>Web API call samples for Cron Scheduler Pro</title>
</head>
<body>
<?php
if (!file_exists(__DIR__ . '/app/bootstrap.php')) {
echo "The sample file must be placed in the Magento root folder!";
return;
}
require __DIR__ . '/app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$login = "LOGIN";
$password = "PASSWORD";
$consumerKey = 'd8durcngtxwf52nle30nx63vp5q6vl1o';
$consumerSecret = 'ikoc08swj3odna2tytqmn91s69d2e0gw';
$accessTokenSecret = 'yupmvtaqij6yfr9v47sefiwv91ve5qip';
$accessToken = "g3rfdy7wuhujbhutthyofi9m4fe4pajg";
$website = "http://www.website.com";
$cronJob = "cronscheduler_heartbeat";
// $cronJob = "dynamiccategory_reindex_all";
echo "<pre>";
/*******************************************************************************
* Token based authentication
*******************************************************************************/
echo " .--------------------------------------------------------------------------.\n";
echo " | Token based authentication |\n";
echo " '--------------------------------------------------------------------------'\n";
echo "\n";
/**
* SOAP V2 API
*/
echo " == Executing the job '".$cronJob."' using the Soap v2 web API\n";
echo "\n";
$opts = ["http" => ["header" => "Authorization: Bearer " . $accessToken]];
$context = stream_context_create($opts);
$wsdlService = $website . "/index.php/soap/default?wsdl&services=wyomindCronSchedulerProCronV1";
$soapClient = new \Zend\Soap\Client($wsdlService);
$soapClient->setSoapVersion(SOAP_1_2);
$soapClient->setStreamContext($context);
// reun the job 'cronscehduler_heartbeat'
$soapResult = $soapClient->wyomindCronSchedulerProCronV1run(array("jobCode" => $cronJob));
if ($soapResult) {
$result = json_decode($soapResult->result);
echo " >> Raw result: ".$soapResult->result."\n";
if ($result->error) {
echo " >> Error when running the '".$cronJob."' job.\n";
echo " >> Message: " . $result->message;
} else {
echo " >> The '".$cronJob."' job has been successfully executed.\n";
}
}
echo "\n\n";
?>
</body>
</html>