SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 278 visiteurs en ce moment

Accueil > Outils pour plugins > Tutoriaux pour Plugins > Ajouter une tache CRON dans un plugin SPIP

Ajouter une tache CRON dans un plugin SPIP

Comment générer l’exécution d’un traitement régulier en tâche de fond

1er décembre 2007 – par chryjs – commentaires

11 votes

Attention, cette page de documentation est incomplète... Vous devrez donc découvrir et expérimenter par vous-même. Des liens à la fin permettent d’accéder à d’autres documentations.
Soyez sympa, pensez à revenir compléter cette page ;-)

Vous avez rêvé de savoir comment, je vais essayer d’expliquer ce que j’en ai compris :-)

La documentation ci-dessous est faite à partir de mon analyse du code de SPIP et n’est donc pas la doc officielle... réalisée pour le Plugin Forum SpipBB.

Pour ajouter une tâche de CRON exécutée, par exemple toutes les 60x10 secondes (soit toutes les 10 minutes) pour le plugin SpipBB.

1. Créer la tâche

NB : Pour notre exemple, j’ai choisi comme tâche de faire une ligne de log avec la fonction spip_log(). Vous pouvez bien entendu remplacer cela par toutes les actions que vous voulez réaliser !

Une tâche c’est une série d’actions à réaliser, que vous aurez programmé en PHP (a priori) pour s’intégrer dans SPIP. Vous pourrez regarder par exemple ce qui est fait dans le noyau pour le traitement des statistiques.

Appelons donc, pour l’exemple, la tâche "une ligne de log" : montravail

Il existe deux mécanismes légèrement différents à ce jour, dépendant de la version de SPIP :

Où et comment stocker la tâche planifiée selon la version de SPIP
SPIP 1.9.2 SPIP 2.0
Fichier inc/spipbb_cron.php genie/montravail.php
Code
cron_spipbb_cron($time)  {
        // exemple de tâche possible
        spip_log("Mon travail c est juste une ligne de log....");
}
genie_montravail($time)  {
        // exemple de tâche possible
        spip_log("Mon travail c est juste une ligne de log....");
}

Donc selon la version de SPIP pour laquelle vous rédigez votre plugin il vous faudra créer un fichier contenant la fonction idoine.

NB : Vous pouvez envisager de créer une compatibilité entre les deux soit en dupliquant les entrées soit en créant un appel de l’un par l’autre.

2. Ajout d’une entrée dans la liste des tâche à exécuter

Une fois la tâche existante, il faut qu’elle soit « planifiée », c’est-à-dire ajoutée à la liste des tâches planifiées que SPIP réalise déjà.

Dans le fichier plugin.xml on ajoute l’entrée :

Attention, dans cet exemple : SpipBB est le <prefix> (au sens plugin.xml) de mon plugin.

Dans le ficher spipbb_pipelines.php (qu’il faut créer s’il n’existe pas), on ajoute la partie suivante :

Mise en œuvre

Il ne faut pas oublier que le lancement de la tâche dépendra de la fréquentation de la page qui contient la balise #SPIP_CRON (par défaut la page sommaire).

Dans cet exemple, on pourra vérifier que dans tmp/spip.log je trouve régulièrement une ligne avec « Mon travail c’est juste une ligne de log »...

Informations complémentaires

Notez bien que vous pouvez donner le nom que vous souhaitez à votre tâche (par ex : nomdelatache et même en créer plusieurs. Mais il faudra bien respecter le fait d’associer le nom de la tâche à la fonction cron_nomdelatache (ou genie_nomdelatache), ainsi que le nom du fichier dans inc/ : inc/nomdelatache.php, et aussi la référence dans la table des tâches $taches_generales['nomdelatache'] .

Dernière modification de cette page le 1er décembre 2008

Retour en haut de la page

Vos commentaires

  • Le 31 mars 2011 à 18:10, par xtezza En réponse à : Ajouter une tache CRON dans un plugin SPIP

    Bonjour,

    je suis assez désespéré, je suis en train de finaliser un plugin mais mon spip_cron ne veux pas fonctionner.
    Je vous laisses donc ici quelques éléments qui pourraient vous aider à me débloquer ...

    dans plugin.xml :

    <pipeline>
            <nom>taches_generales_cron</nom>
            <inclure>sitemap_pipeline.php</inclure>
    </pipeline>

    dans sitemap_pipeline.php

    function sitemap_taches_generales_cron($taches_generales){
            $taches_generales['sitemap_cron'] = 30;
            return $taches_generales;
    }

    dans genie/sitemap_cron

    function genie_sitemap_cron_dist{
            spip_log("test de mon cron");
    }

    mais voilà ... RIEN
    Merci d’avance de votre aide

    • Le 13 avril 2011 à 10:55, par Boyquotes En réponse à : Ajouter une tache CRON dans un plugin SPIP

      Bonjour,

      Avez-vous fait des tests avec
      $taches_generales[’sitemap_cron’] = 60*1 ;

      Car toutes les 30 secondes, c’est peu être trop court, c’est indiqué dans cet article.

      Aussi, il faut aussi tester :
      se connecter sur la page sommaire, se loguer/déloguer pour forcer le déclenchement du cron.

      bonne journée.
      Nicolas

    Répondre à ce message

  • Le 1er octobre 2009 à 17:58, par ? En réponse à : Ajouter une tache CRON dans un plugin SPIP

    salut,

    Je cherche à faire afficher les vus dans le forum de spipBB.

    Quelqu’un aurait une idée ?

    squirrel :D

    Répondre à ce message

  • Le 14 mai 2009 à 10:05, par ? En réponse à : Ajouter une tache CRON dans un plugin SPIP

    tu parles de plugin (faut-il créer un plugin ?)

    l’auteur parle d’inclure des taches de fond dans un plugin c’est le but recherché du plugin.

    tu écris : $taches_generales[’montravail’] => $taches_generales => est le tableau « globale » des tâches générales et ’montravail’ est le nom de la tâche générale que l’on souhaite voir exécutée en gros partout ou tu as mon travail tu met le titre que tu veux à la place en respéctant la syntaxe spip qui vas avec à savoir genie_ cron_ etc...

    pourquoi ’montravail’ et pas autre chose ? tu pourrais mettre ’autrechose’ à la place de montravail ... à remplacer partout (c’est vraiment chercher les puces là)

    je suppose que ca fait référence au prog dans inc/ tu suposes bien ...

    A quoi sert spip_log( dans inc/montravail.php) Spip log permet d’écrire dans tmp/spip.log

    Je travaille depuis 2 ans sur Spip et j’ai réalisé plusieurs plugins sans être expert en spip, je maîtrise bien et je voulais comprendre les taches avec la balise #SPIP_CRON

    ton tuto est insuffisant => je suis pas d’accord avec toi son tuto est explicite au contraire, il ne détail pas ce qui n’est pas essentielle à la compréhension de cron, il aurait peut être du expliquer la méchanique de #SPIP_CRON en lui même mais bon, c’est déjà pas mal comme doc

    je vais être obligé de me plonger moi-même dans l’étude de cas, de plugins ayant déjà utilisé les taches de fonds => Comme ça qu’on apprend le mieux :)

    Dommage !

    Répondre à ce message

  • Le 3 avril 2008 à 00:34, par Bernard En réponse à : Ajouter une tache CRON dans un plugin SPIP

    Si j’ai bien compris, c’est la fréquentation sur le site public qui active le cron placé dans le plugin.

    Si la tache cron est prévue toutes les 6 heures par exemple dans une entreprise ; cela veut-il dire que la tache prévue à minuit, ne se fera pas ( à moins que le veilleur de nuit...) ? Est-il possible de provoquer un cron sans aller surfer sur les pages ?

    • Le 3 avril 2008 à 09:38, par chryjs En réponse à : Ajouter une tache CRON dans un plugin SPIP

      Pour la documentation des motivations de #SPIP_CRON et de son principe, je te renvoie vers la documentation officielle de SPIP : Les balises propres au site .

      Attention toutefois, je note un risque de confusion : avec cette balise il s’agit d’intervalles souhaités, pas d’horaires programmés, car ce n’est pas sérieusement possible par l’intermédiaire d’un site web.

      Pour « déclencher » un programme sans surfer sur les pages, comme toujours il n’y qu’une réponse possible : comment fait l’ordinateur pour démarrer ce fameux programme ? Forcément un être humain est l’auteur de ce démarrage. Quelques solutions classiques :

      • soit tu as la main en direct sur l’ordinateur en question : exécution classique d’un logiciel, ou alors via une tâche programmée gérée par un programmateur [1] (ie : crontab).
      • ton hébergeur te fourni un accès plus ou moins direct à un programmateur (parfois via web) et dans ce cas... suivre sa documentation !
      • soit tu n’as pas accès direct sur l’ordinateur en question et là pas de solution autre que l’astuce de SPIP (ou similaire).

      [1scheduler

    • Le 3 avril 2008 à 14:08, par Bernard En réponse à : Ajouter une tache CRON dans un plugin SPIP

      Oui c’est bien ce que j’avais compris, sauf que tu précises très bien la notion de programmation d’une tache et l’exécution à intervalle x d’un script.. (effectivement j’admets la confusion ;) )

      Maintenant une autre question à moins que sa place soit plutôt sur spip dèv :

      1. Comment faire un bouton dans un plugin permettant d’activer la tache de fond ou pas ?
      2. Est-ce possible ?

      Merci et je le trouve très bien et très clair cet article là !

    Répondre à ce message

  • Le 30 janvier 2008 à 13:46, par danou9 En réponse à : Ajouter une tache CRON dans un plugin SPIP

    bonjour,

    bonne idée de faire un tuto, mais je suis décu

    tu parles de plugin (faut-il créer un plugin ?)

    tu écris : $taches_generales[’montravail’]

    pourquoi ’montravail’ et pas autre chose ?

    je suppose que ca fait référence au prog dans inc/

    A quoi sert spip_log( dans inc/montravail.php

    Je travaille depuis 2 ans sur Spip et j’ai réalisé plusieurs plugins sans être expert en spip, je maîtrise bien et je voulais comprendre les taches avec la balise #SPIP_CRON

    ton tuto est insuffisant

    je vais être obligé de me plonger moi-même dans l’étude de cas, de plugins ayant déjà utilisé les taches de fonds

    Dommage !

    • Le 4 février 2008 à 11:10, par chryjs En réponse à : Ajouter une tache CRON dans un plugin SPIP

      Il y a beaucoup de points dans ton message. Je vais essayer de répondre au fur et à mesure :

      • « Faut-il créer un plugin ? » : je n’en suis pas sûr mais comme il faut ajouter une tâche comme indiqué au paragraphe 1 , il me semble que cela n’est possible qu’en réalisant un plugin.
      • Pourquoi « montravail » ? Un petit manque au niveau de l’explication de cette doc (que je vais actualiser donc). C’est un nom « générique » que j’ai choisi pour faire cet exemple. On peut l’appeler comme on veut à condition de bien reprendre le même nom dans le nom de la tâche (cf paragraphe 1) ex : tachebidule -> cron_tachebidule / genie_tachebidule .
      • A quoi sert « spip_log... » ? A rien ! C’est juste un exemple de tâche réalisée. En l’occurence j’ai choisi de générer une ligne de log. A toi de programmer (en php) ce que tu veux que la tâche réalise !

      Je prend bonne note de tes remarques et vais faire quelques ajouts pour l’améliorer :)

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Plugin Logo SVG : pouvoir utiliser des logos SVG

    17 octobre – commentaires

    Le SVG est un format vectoriel donc très léger et redimensionnable sans pertes, mais SPIP ne l’acceptait pas sur les logos. Ce plugin comble ce manque. Comment ça fonctionne ? Vous installez ce plugin, vous l’activez, et c’est tout. Crédits Une (...)

  • Utilisez le framework Foundation dans vos squelettes !

    13 août 2013 – 58 commentaires

    Foundation est un framework CSS et Javascript très complet pour réaliser des sites sur une grille propre et homogène. Mais surtout, il permet de rendre un site responsive très facilement ! Ce plugin ajoute le framework Foundation sur l’espace (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 65 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)

  • GIS 4

    11 août 2012 – 1288 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)

  • Metas +

    3 décembre – commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)