[Résolu] Ajouter des actions dans le Cron

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjours,

j'aimerai savoir si il été possible (et comment) d'ajouter des actions dans le Cron de Drupal 5.x, par exemple, que toute les 2h, avec le module poormanscron, le Cron lance un script PHP?

je vous remercie d'avance

Version de Drupal : 

Salut,

Pour ajouter des actions au cron de Drupal, il te faut créer un module dans lequel tu implémenteras le hook_cron().

Concrètement, si tu crées un module qui s'appelle toto (toto.module), tu mettras dans ce module une fonction appelée toto_cron(), et c'est dans cette fonction que tu appelleras les fonctions à exécuter lors du cron.

y'a pas à dire, mais Drupal, c'est parfait,
je trouve un peu dommage de devoir mettre les tâches planifié dans le répertoire modules, même si c'est facilement compréhensible (un gestionnaire de Cron serait pratique pour pouvoir y mettre des scripts PHP à lancé à des heures précises, comme IPB)

Merci pour ton aide drupalfrance

Ce que tu decris pourrait faire partie d'un nouveau module qui permette de rajouter des bouts de scripts dans une interface, les stocke ds la BDD et lorsque le cron tourne, il fait appel a ces scripts.

Cependant, c'est qd meme pas des modifs qui sont fait si souvent que ca nan ?

un gestionnaire de Cron serait pratique pour pouvoir y mettre des scripts PHP à lancé à des heures précises, comme IPB

Mouais. Mais qu'est-ce qu'ils font tes scripts PHP ? S'il s'agit de tâches propres à Drupal, alors tu dois être dans le contexte de Drupal pour pouvoir utiliser son API, ses hooks, sa base de données, etc. donc ça parait super logique - pour ne pas dire indispensable - de créer un module.

En revanche, si tes tâches CRON ne sont pas propres à Drupal, alors il te suffit de lancer directement tes scripts PHP via la crontab, sans te préoccuper de Drupal.

Je trouve que le système actuel est nickel. Si tu as un exemple de tâches à réaliser en CRON qui ne rentrent pas dans l'alternative ci-dessus, je suis curieux.

Ce sont juste des scripts qui permettent:
la visite d'un site web, vérifié si il a été modifier, récupérer certaine parti, crée un article, y mettre les modifications, le publié.

y'a pas que ça, y'a aussi un script qui regarde les articles non publié, en prend 1 aléatoirement, et le publie et le promu.

Je pense qu'un simple gestionnaire de tâche permettrait de faire la différence entre les modules qui modifie le site et les tâches qui n'ont presque rien à voir, effectivement, je pourrai le lancé à partir d'un Cron sur un serveur, mais j'aimerai profité du module PoorCronsMan pour les lancés à des heures précises.

Y a un truc que j'ai pas compris:
2 ou 3 fois par jours ;)
Ca c'est la frequence de ton Cron, pas la Frequence de modification de tes scripts (ce pour quoi je disais qu'un module etait pas forcement utile...)

je pourrai le lancé à partir d'un Cron sur un serveur, mais j'aimerai profité du module PoorCronsMan pour les lancés à des heures précises.
Euh...
Si tu lances un cron sur le serveur, tu peux l'avoir a des heures precises, c'est justement le concept du Cron...

Par contre comme dit Vincent, un module c'est qd meme bien plus pratique car supposons que migre ton site, deplacer les fichiers c'est facile, par contre se souvenir qu'y a des crons qui tourne sur le serveur, ca l'est bcp moins...

Les 2 ou 3 fois par jours, c'est pas la fréquence de Cron, mais bien le nombre de fois où le Cron doit lancé le script.

Il est possible aussi de lancer des tâches Cron à partir de Drupal à des heures précises avec PoorCronsMan/CronPlus?

Je pense que ça peut être pratique un gestionnaire de tâche Cron externe aux modules, avec directement le code dans la base de donnée, avec une exécution à des heures programmé en fonction des appels de Cron, c'est comme pour IPB, c'est vrai que c'est assez pratique...

Ouhlà. Ptêtre qu'un passage par http://fr.wikipedia.org/wiki/Cron permettrait de dissiper un peu de confusion.

Cron est un programme qui tourne sur les serveurs Unix et permet d'exécuter des commandes à intervalle régulier, par exemple : exécuter un script PHP, sauvegarder une base de données...

Or justement, Drupal possède un script cron.php qui doit être exécuté à intervalles réguliers pour réaliser des tâches de maintenance diverses (indexer le site, vider la table des sessions...). Après avoir installé Drupal, il faut donc dire au programme cron d'exécuter ce script régulièrement (toutes les heures, tous les jours... c'est comme on veut).

Le hic, c'est que certaines personnes n'ont pas accès au programme cron (soit par restriction de leur hébergeur, soit parce qu'ils n'utilisent pas un serveur Unix), on a donc inventé le module poormanscron pour ces gens-là : c'est un module qui déclenche le script cron.php toutes les X requêtes (et qui donc n'a plus besoin du programme cron pour s'exécuter).

En conclusion :

  • Drupal ne peut pas "lancer des tâches cron". En revanche, des modules peuvent définir des tâches à réaliser à chaque exécution de cron.php, en implémentant le hook_cron() [c'est ce qu'on te recommande]. Bien sûr, ces tâches ne seront jamais exécutées si le programme cron (unix) ou le module poormanscron (drupal) ne sont pas installés.

  • Si ton script doit être exécuté 2 ou 3 fois par jour, alors cron doit lancer le script 2 ou 3 fois par jour, c'est la même chose.

  • Vu ce que tu veux faire ("crée un article, y mettre les modifications, le publié. y'a pas que ça, y'a aussi un script qui regarde les articles non publié, en prend 1 aléatoirement, et le publie et le promu"), tu as tout intérêt à créer un module Drupal. Sinon, comment aurais-tu fait tout ça dans un "simple" script PHP? En tapant directement dans la BDD? Bad bad practise...

  • Je ne connais pas IPB, mais la confusion vient peut être du fait que ce dernier propose un "programmateur de tâches". Cron n'est pas vraiment la même chose. Si tu veux des actions programmables dans Drupal, tourne-toi du côté du module http://drupal.org/project/actions

Je pense que j'ai assez mal expliqué et tu as bien fait de donner des précision

* Vu ce que tu veux faire ("crée un article, y mettre les modifications, le publié. y'a pas que ça, y'a aussi un script qui regarde les articles non publié, en prend 1 aléatoirement, et le publie et le promu"), tu as tout intérêt à créer un module Drupal. Sinon, comment aurais-tu fait tout ça dans un "simple" script PHP? En tapant directement dans la BDD? Bad bad practise...
C'été exactement ce que je compté faire, que le script contienne une condition de déclenchement (lorsqu'il n'a pas été exécuté les 3heures précédentes) et qu'il soit lancé lorsque le Cron de Drupal se déclenche par l'intermédiaire de PoorMansCron

Je pense voir pourquoi c'est une mauvaise façon de procédé,
mais je trouve dommage qu'un module ne permet pas de voir et gérer les tâches Cron, les activer/désactiver (CronPlus?)...

Je jette un oeil sur action (merci)

je trouve dommage qu'un module ne permet pas de voir et gérer les tâches Cron, les activer/désactiver
Fidèle à l'esprit communautaire de Drupal, je te conseillerais de développer un tel module et d'en faire ensuite profiter la communauté. :)

Pour ton problème de déclencher une action toutes les 3 heures, je comprends mieux : en gros, tu dis que le script cron.php de Drupal sera par exemple exécuté toutes les heures, mais que toi tu veux effectuer une action "seulement" toutes les 3 heures. Dans ce cas, en effet, cronplus peut t'aider.

Cela dit, cronplus résout uniquement la question de la "condition de déclenchement". Pour ce qui est de l'implémentation proprement dite, il te faudra bel et bien créer un module (et non un "simple" script PHP).

Enfin, si les tâches à réaliser sont du style créer des articles, changer leur statut, les promouvoir... je te conseille vivement de passer par l'API Drupal plutôt que d'attaquer directement la BDD, à moins de vraiment savoir ce que tu fais.

Je ne pense pas avoir assez d'expérience pour crée un tel module, désolé, c'été juste une petit suggestion, si quelqu'un y voit un intérêt et possède l'expérience ;)

Personnellement, pour revenir à mon objectif de crée une tâche planifié, je pense faire un module assez complet, Configuration + Cron, je vais regardé un module simple qui possède ses caractéristiques déjà présentes, en faire une copie, et le modifier pour qu'il réponde à mes besoins assez simple.

J'y vois 1 seul inconvénient, les mises à jours de Drupal (demande une retouche du module),
mais il est vraiment dommage de ne pas l'avoir dans un parti spécial qui permettrai vraiment de savoir qu'il ne fait rien d'autre que d'attendre un déclenchement par Cron pour se lancé...

Je ne sais pas si j'aurais besoin de CronPlus (faire sans), je ne pense pas me lancé dans le développement avant quelque semaines (le temps d'avoir commencé vraiment à me lancé dans Drupal, actuellement, je teste seulement)

Tu aurais plus d'informations sur Action?

Je l'ai installé, mais c'est pas très parlant, je ne vois pas trop à quoi il sert à par crée des automatismes (enfin, je n'en suis pas sûr)...