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

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

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

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 :

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

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 :

function spipbb_taches_generales_cron($taches_generales){
	$taches_generales['montravail'] = 60 * 10; // par exemple toutes les 10 minutes, ne pas descendre en dessous de 30 secondes !
	return $taches_generales;
}

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'] .

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom