N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
J’utilise la solution mantis depuis pas mal d’années pour suivre l’ensemble des mes projets personnels, à ce titre j’ai déjà développé quelques plugins spécifiques à mes différents besoins.
( La grande majorité sont disponibles sur github ou sur ce blog )
J’ai de plus en plus de plugins qui nécessitent l’exécution de tâches planifiées ( cron ), et à part ajouter manuellement les crons de chaque plugin dans la crontab du serveur je n’ai pas trouvé de solution pratique sur mantis bugtracker pour gérer ces crons.
Edit 2021-03-01 :
A compter de la version 2.25 il existe un événement natif « EVENT_CRONJOB » qui permets d’avoir un fonctionnement qui est plus basique que ce module, mais qui est intégré directement à la solution.
Pour autant la solution proposée ici reste toujours intéressante.
C’est donc l’occasion de faire un nouveau plugin qui va permettre de simplifier tout cela 😀
Ce plugin nécessite les droits d’administrateur pour pouvoir visualiser et configurer les informations
Principe de fonctionnement
Ce plugin va collecter l’ensemble des tâches planifiées de l’ensemble des autres plugins via un événement personnalisé.
Il ne sera donc nécessaire que d’entrer la page de ce module dans la crontab de votre serveur
Nous verrons dans la dernière partie comment ajouter des tâches planifiées via un plugin.
Il ne gère pour l’instant pas la saisie d’url via le back-office, ce sera peut être implémenté dans une version future.
Apparence et configuration
Une fois le plugin installé un nouvel élément est visible dans le menu « Gestion des tâches planifiées »
En cliquant dessus la page de configuration s’affiche.
Sur cette page on peut voir les instructions pour configurer la tâche planifiée du module
On peut également activer ou non la tâche de contrôle , celle-ci permets de connaître la dernière exécution du fichier sur le serveur
Ou activer le mode debug qui va logguer les tâches planifiées et leur exécution dans un fichier de log.
Pour finir la liste des tâches planifiées à traiter sont listées avec des informations complémentaires sur leur provenance, source et fréquence
Ajouter des tâches planifiées via un plugin
Voici à présent comment procéder techniquement pour ajouter des tâches planifiées dans votre plugin.
J’ai mis l’ensemble des informations directement dans le code qui est relativement parlant
class HhSamplePlugin extends MantisPlugin { public function register() { $this->name = plugin_lang_get('title'); $this->description = plugin_lang_get('description'); $this->version = '0.1.0'; $this->requires = array( 'MantisCore' => '2.0.0', ); #Cron Manager $this->uses = array( 'HhCronManager' => '0.1.0' ); $this->author = 'Hennes Hervé'; $this->contact = '[email protected]'; $this->url = 'https://www.h-hennes.fr/blog/'; } /** * plugin hooks * @return array */ function hooks() { global $g_event_cache; #Custom Hook from plugin HhCronManager if ( array_key_exists('EVENT_PLUGIN_HHCRONMANAGER_COLLECT_CRON',$g_event_cache)){ $t_hooks['EVENT_PLUGIN_HHCRONMANAGER_COLLECT_CRON'] = 'collect_cron'; } return $t_hooks; } /** * Executed by module HhCronManager when collecting plugins cron tasks * @param string $eventName * @return array */ public function collect_cron($eventName) { $pluginName = str_replace('Plugin','',get_class($this)); return [ # 1 Tableau = 1 tache, il est possible d'en ajouter autant que souhaité [ 'plugin' => $pluginName, #Nom du plugin 'code' => $pluginName . '_cron_reminder',#Code unique pour le cron 'frequency' => '0 * * * * *',#cron expression 'description' => 'description de la page',#description 'url' => 'cron',#nom de la page du plugin à appeller , attention elle sera appellée sous la forme , www.mantisurl.com/plugin.php?page=PluginName/url ], ]; } } |
Vous pouvez télécharger le plugin depuis github :https://github.com/nenes25/mantisbt_cronmanager
Attention à bien suivre les instructions d’installation, car ce plugin utilise des librairies externes installée via composer 😉
N’hésitez pas à me faire des retours ou des optimisations possibles via les commentaires ou via github