{"id":2096,"date":"2020-03-26T18:07:43","date_gmt":"2020-03-26T16:07:43","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=2096"},"modified":"2021-03-02T11:10:17","modified_gmt":"2021-03-02T09:10:17","slug":"mantis-bugtracker-gestion-des-cron","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2020\/03\/26\/mantis-bugtracker-gestion-des-cron\/","title":{"rendered":"Mantis Bugtracker : Gestion des cron"},"content":{"rendered":"\n<p>J&rsquo;utilise la solution mantis depuis pas mal d&rsquo;ann\u00e9es pour suivre l&rsquo;ensemble des mes projets personnels, \u00e0 ce titre j&rsquo;ai d\u00e9j\u00e0 d\u00e9velopp\u00e9 quelques plugins sp\u00e9cifiques \u00e0 mes diff\u00e9rents besoins.<br \/>\u00a0( La grande majorit\u00e9 sont disponibles sur github ou sur ce blog )<\/p>\n<p>J&rsquo;ai de plus en plus de plugins qui n\u00e9cessitent l&rsquo;ex\u00e9cution de t\u00e2ches planifi\u00e9es ( cron ), et \u00e0 part ajouter manuellement les crons de chaque plugin dans la crontab du serveur je n&rsquo;ai pas trouv\u00e9 de solution pratique sur mantis bugtracker pour g\u00e9rer ces crons.<\/p>\n<p><strong>Edit 2021-03-01 : <\/strong><br \/><strong>A compter de la version 2.25 il existe un \u00e9v\u00e9nement natif\u00a0 \u00ab\u00a0EVENT_CRONJOB\u00a0\u00bb qui permets d&rsquo;avoir un fonctionnement qui est plus basique que ce module, mais qui est int\u00e9gr\u00e9 directement \u00e0 la solution.<\/strong><br \/><strong>Pour autant la solution propos\u00e9e ici reste toujours int\u00e9ressante.<\/strong><br \/><br \/>C&rsquo;est donc l&rsquo;occasion de faire un nouveau plugin qui va permettre de simplifier tout cela \ud83d\ude00<br \/><br \/>Ce plugin n\u00e9cessite les droits d&rsquo;administrateur pour pouvoir visualiser et configurer les informations<\/p>\n<h3>Principe de fonctionnement<\/h3>\n<p>Ce plugin va collecter l&rsquo;ensemble des t\u00e2ches planifi\u00e9es de l&rsquo;ensemble des autres plugins via un <span style=\"text-decoration: underline;\">\u00e9v\u00e9nement personnalis\u00e9.<br \/><\/span>Il ne sera donc n\u00e9cessaire que d&rsquo;entrer la page de ce module dans la crontab de votre serveur<br \/>Nous verrons dans la derni\u00e8re partie comment ajouter des t\u00e2ches planifi\u00e9es via un plugin.<br \/>Il ne g\u00e8re pour l&rsquo;instant pas la saisie d&rsquo;url via le back-office, ce sera peut \u00eatre impl\u00e9ment\u00e9 dans une version future.<\/p>\n<h3><br \/>Apparence et configuration<\/h3>\n<p>Une fois le plugin install\u00e9 un nouvel \u00e9l\u00e9ment est visible dans le menu \u00ab\u00a0Gestion des t\u00e2ches planifi\u00e9es\u00a0\u00bb<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"129\" height=\"432\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-menu.png\" alt=\"\" class=\"wp-image-2097\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-menu.png 129w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-menu-90x300.png 90w\" sizes=\"auto, (max-width: 129px) 100vw, 129px\" \/><figcaption>Ajout d&rsquo;un lien dans le me<\/figcaption><\/figure>\n\n\n\n<p>En cliquant dessus la page de configuration s&rsquo;affiche.<br><br>Sur cette page on peut voir les instructions pour configurer la t\u00e2che planifi\u00e9e du module<\/p>\n<p>On peut \u00e9galement activer ou non la t\u00e2che de contr\u00f4le , celle-ci permets de conna\u00eetre la derni\u00e8re ex\u00e9cution du fichier sur le serveur<br><br>Ou activer le mode debug qui va logguer les t\u00e2ches planifi\u00e9es et leur ex\u00e9cution dans un fichier de log.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"838\" height=\"441\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config.png\" alt=\"\" class=\"wp-image-2098\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config.png 838w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config-300x158.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config-768x404.png 768w\" sizes=\"auto, (max-width: 838px) 100vw, 838px\" \/><figcaption>Configuration des crons<\/figcaption><\/figure>\n\n\n\n<p>Pour finir la liste des t\u00e2ches planifi\u00e9es \u00e0 traiter sont list\u00e9es avec des informations compl\u00e9mentaires sur leur provenance, source et fr\u00e9quence<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"832\" height=\"319\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config-2.png\" alt=\"\" class=\"wp-image-2099\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config-2.png 832w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config-2-300x115.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2020\/03\/mantis-cron-config-2-768x294.png 768w\" sizes=\"auto, (max-width: 832px) 100vw, 832px\" \/><figcaption>Liste des crons<\/figcaption><\/figure>\n\n\n\n<h3>Ajouter des t\u00e2ches planifi\u00e9es via un plugin<\/h3>\n<p>Voici \u00e0 pr\u00e9sent comment proc\u00e9der techniquement pour ajouter des t\u00e2ches planifi\u00e9es dans votre plugin.<br>J&rsquo;ai mis l&rsquo;ensemble des informations directement dans le code qui est relativement parlant<\/p>\n<p>&nbsp;<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">class HhSamplePlugin extends MantisPlugin\n{\n\n    public function register()\n    {\n        $this-&gt;name = plugin_lang_get('title');\n        $this-&gt;description = plugin_lang_get('description');\n        $this-&gt;version = '0.1.0';\n        $this-&gt;requires = array(\n            'MantisCore' =&gt; '2.0.0',\n        );\n        #Cron Manager\n        $this-&gt;uses = array(\n            'HhCronManager' =&gt; '0.1.0'\n        );\n\n        $this-&gt;author = 'Hennes Herv\u00e9';\n        $this-&gt;contact = 'contact@h-hennes.fr';\n        $this-&gt;url = 'https:\/\/www.h-hennes.fr\/blog\/';\n    }\n    \n    \/**\n     * plugin hooks\n     * @return array\n     *\/\n    function hooks()\n    {\n        global $g_event_cache;\n        #Custom Hook from plugin HhCronManager\n        if ( array_key_exists('EVENT_PLUGIN_HHCRONMANAGER_COLLECT_CRON',$g_event_cache)){\n            $t_hooks['EVENT_PLUGIN_HHCRONMANAGER_COLLECT_CRON'] = 'collect_cron';\n        }\n\n        return $t_hooks;\n    }\n\n    \/**\n     * Executed by module HhCronManager when collecting plugins cron tasks\n     * @param string $eventName\n     * @return array\n     *\/\n    public function collect_cron($eventName)\n    {\n        $pluginName = str_replace('Plugin','',get_class($this));\n        return [\n            # 1 Tableau = 1 tache, il est possible d'en ajouter autant que souhait\u00e9\n            [\n                'plugin' =&gt; $pluginName, #Nom du plugin\n                'code' =&gt; $pluginName . '_cron_reminder',#Code unique pour le cron\n                'frequency' =&gt; '0 * * * * *',#cron expression\n                'description' =&gt; 'description de la page',#description\n                'url' =&gt; 'cron',#nom de la page du plugin \u00e0 appeller , attention elle sera appell\u00e9e sous la forme , www.mantisurl.com\/plugin.php?page=PluginName\/url\n            ],\n        ];\n    }\n\n}\n<\/pre>\n\n\n\n<p>Vous pouvez t\u00e9l\u00e9charger le plugin depuis github :<a href=\"https:\/\/github.com\/nenes25\/mantisbt_cronmanager\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/nenes25\/mantisbt_cronmanager<\/a><\/p>\n<p>Attention \u00e0 bien suivre les instructions d&rsquo;installation, car ce plugin utilise des librairies externes install\u00e9e via composer \ud83d\ude09<br><br>N&rsquo;h\u00e9sitez pas \u00e0 me faire des retours ou des optimisations possibles via les commentaires ou via github<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;utilise la solution mantis depuis pas mal d&rsquo;ann\u00e9es pour suivre l&rsquo;ensemble des mes projets personnels, \u00e0 ce titre j&rsquo;ai d\u00e9j\u00e0 d\u00e9velopp\u00e9 quelques plugins sp\u00e9cifiques \u00e0 mes diff\u00e9rents besoins.\u00a0( La grande majorit\u00e9 sont disponibles sur github ou sur ce blog ) J&rsquo;ai de plus en plus de plugins qui n\u00e9cessitent l&rsquo;ex\u00e9cution de t\u00e2ches planifi\u00e9es ( cron [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[247],"tags":[83,509,82],"class_list":["post-2096","post","type-post","status-publish","format-standard","hentry","category-mantis-bugtracker","tag-bugtracker","tag-cron","tag-mantis"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=2096"}],"version-history":[{"count":2,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2096\/revisions"}],"predecessor-version":[{"id":2245,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2096\/revisions\/2245"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=2096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=2096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=2096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}