Elysia_cron

  • warning: array_map(): Argument #2 should be an array in /var/www/titouille.ch/www/modules/system/system.module on line 1050.
  • warning: array_keys() expects parameter 1 to be array, null given in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
  • warning: Invalid argument supplied for foreach() in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
Portrait de titouille

Drupal possède un "cron" par défaut, puis chaque module peut implémenter sa propre méthode "hook_cron", qui sera appelée à chaque appel de cron.php.
Le problème réside dans la fréquence des appels cron. Si on appelle le cron chaque heure, on risque de passer à côté de certaines tâches qui devraient être exécutées plus fréquemment. A l'inverse, si une tâche cron lourde est appelée chaque heure, le serveur sera ralenti par l'exécution de ces tâches, qu'on aurai pu espacer (chaque 24h par exemple).

Elysia_cron est un petit module bien pratique. Il permet de paramétrer des tâches "cron" qui seront exécutées indépendamment les unes des autres. Chaque tâche va pouvoir être affectée à une intervalle particulière, et sera exécutée proprement lors de l'appel du cron.

Néanmoins, pour exécuter proprement le cronjob, il est nécessaire de le rajouter dans la configuration du serveur. Pour éditer le fichier des tâches cron, il suffit d'entrer la ligne de commande suivante (debian) :

crontab -e

Le problème maintenant, c'est de faire en sorte qu'un nouveau job soit ajouté et exécuté chaque minute. Pour ce faire, il suffit d'utiliser la syntaxe suivante :

* * * * *

cette dernière permet d'exécuter le job à toutes les minutes de toutes les heures de tous les jours de tous les mois de toutes les années... Vous l'aurez compris, chaque minute, qu'il pleuve, qu'il vente ou qu'il neige.

Après avoir fait des recherches sur le net, voici le genre de syntaxe complète qu'il était indiqué :

* * * * * wget /usr/bin/wget -O - -q -t 1 http://www.monsite.com/sites/all/modules/elysia_cron/cron.php

Le souci, c'est que lorsque cette tâche est exécutée, j'ai un joli retour négatif comme quoi il n'arrive pas à trouver le fichier /includes/bootstrap.inc :


Warning: include_once(./includes/bootstrap.inc): failed to open stream: No such file or directory in /home/watch/www/sites/all/modules/elysia_cron/cron.php on line 12

Warning: include_once(): Failed opening './includes/bootstrap.inc' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/watch/www/sites/all/modules/elysia_cron/cron.php on line 12

Fatal error: Call to undefined function drupal_bootstrap() in /home/watch/www/sites/all/modules/elysia_cron/cron.php on line 13

Tout ceci à cause d'une problématique de chemin relatif / chemin absolu.
J'ai du faire pas mal de tests afin de finalement réussir à m'y retrouver.

Au final : dans le répertoire racine de mon site, j'ai créé un fichier nommé elysia_cron.sh. J'y ai mis le contenu suivant :

#!/bin/bash
cd /home/watch/www
/usr/bin/php sites/all/modules/elysia_cron/cron.php

J'ai ensuite rendu ce fichier exécutable

chmod +x elysia_cron.sh

Puis j'ai enfin rajouté la ligne suivante dans le fichier crontab :

* * * * * bash /home/watch/www/elysia_cron.php

Et cette fois-ci ça fonctionne, le cron est appelé à chaque minute, et le module Elysia_cron exécute proprement les tâches selon leur paramétrage en terme de délai.

En espérant que ça puisse servir. J'ai fait ça à la "one again" histoire que ça tourne, mais je ne suis pas non plus contre de meilleures techniques pour mettre tout ça en place Wink




Bon j'essaye de comprendre...

Bon j'ai cherché la syntaxe de mon coté : j'ai trouvé ça :
* * * * * /usr/bin/wget -O - -q -t 1 http://www.example.com/cron.php
C'est un poil différent du tien (trouvé ici le mien : http://drupal.org/node/23714)

Là ou je comprend rien, c'est ou inserer cette fichue syntaxe. Dans le cron.php à la racine du site ?
Mais je dois l'entourer de quelles balises ? car je vois bien qu'en insérant comme ça le bout de code je ne vais arriver à rien.
Et comme je ne m'y connais pas en php, j'ai beau chercher je ne trouve pas. :/

Je sais que ton article date un peut. Mais finalement il est toujours d'actualité.

Portrait de titouille

Configuration cron

Salut ! Désolé pour le temps de réponse, je délaisse un peu mon blog depuis pas mal de temps, mais néanmoins, je vais tenter de t'expliquer ça de manière simple :

Le "cronjob" est une tâche qui s'exécute de manière récurrente sur un serveur. Ce n'est pas au niveau de Drupal que ça se gère, mais au niveau du serveur en lui-même.

Généralement, il y a 2 solutions :

Soit tu as un accès root au serveur, et tu peux utiliser, via la ligne de commande, la commande "crontab -e" qui te permet d'éditer le fichier crontab et d'insérer les lignes nécessaires.

Soit tu n'as pas d'accès root, et là tu n'as plus qu'à prier pour que ton hébergeur, via l'interface de gestion du serveur, t'autorise à mettre en place des tâches cron. Si c'est le cas, via le panel d'administration (par exemple CPanel) tu devrais pouvoir trouver un accès à un formulaire qui te permet de mettre en place des cronjob.

En gros, ça n'a rien à voir avec PHP, c'est à un niveau plus bas que ça se passe. Cron est un "utilitaire" qui est généralement disponible sur les serveurs linux. Sur mac ça existe également, par contre sur Windows je ne saurais pas te dire.

En espérant que ça puisse t'aider Wink