Bonjour,

J'ai besoin d'exécuter un script toutes les nuits vers 23h30 sur un site basé sous CakePHP 2. J'ai pensé aux taches Cron (que je n'ai jamais utilisées).
Je me suis renseigné très sommairement et j'ai codé tout le bazar dans une action d'un controller, pensant que quelque chose du genre 30 23 * * * wget http://monsite.fr/moncontroller/monaction >/dev/null marcherait.
Mais ce n'est pas le cas, il m'est retourné une erreur 406 Not Acceptable par mail ...

Je me suis repenché plus en profondeur sur le sujet et suis tombé sur les shell de CakePHP qu'il est possible d'utiliser avec Cron. Je n'ai jamais touché à ça et je n'en comprend pas grand chose.
Mais j'ai vu également dans un commentaire d'un post qu'il était possible de lancer une action d'un controller, mais je n'ai pas trouvé comment. C'est faisable ?

Merci d'avance :)

15 réponses


Guiguiwuip
Auteur
Réponse acceptée

J'ai finalement réussi à lancer ma tache en me penchant sur le script bash fourni par la doc et en le modifiant :

//Ligne 4 modifiée par :
cmd="cake"

Quel est l'action que tu effectue ?

Rien de très méchant. Je récupère un mail sur une boite externe, lit une donnée dedans pour l'enregistrer dans la base de données.

Tu es chez quel hébergeur :) ?

[url=planethoster.net]PlanetHoster[/url] :)

Perso même si mon site est en cake, le script cron, je l'ai planifier sur le pa de ovh. Ensuite c'est la validité de ton script qu'il faut vérifier avant de faire ça :)

http://blog.avis-planethoster.com/trucs-astuces/ajouter-un-tache-cron-de-preference-la-nuit-1537

Mon action marche bien quand je l'appelle par moi même. Il n'est pas possible de le faire par cron ?
J'ai regardé les exemple du lien, aucun ne contient wget. Il n'est pas possible de l'utiliser avec CakePHP ?

A quoi servent ces taches cron ?

Lesquelles ? Celles du lien (dans ce cas je ne sais pas trop, l'article n'est pas très clair. Il me semble qu'elles sont liées au cPanel de l'hébergement. Bref, des taches par defaut.) ? Ou celle que je veux mettre en place ? (expliqué à @Coloo plus haut)
:)

Non en général pardon ... je me suis mal exprimé je ne connais pas du tout ce qu'est une tache cron. C'est de la que vient ma question.

Ok, d'après ce que je comprend, une tâche Cron est une action executée automatiquement par le serveur a des intervalles paramétrés.

J'en demandais pas plus merci ^^

Salut,

Tu peut essayé de paramétrer ta tâche cron avec cette commande pour voir :
/usr/local/bin/php -q /url_absolue_de_ton_espace_herbergement/ton_controller/ton_action >/dev/null 2>&1

c'est la commande que j'utilise perso et qui fonctionne très bien.

Salut Franck55,

Merci de ta réponse. J'essaye finalement de suivre la doc pour faire les choses dans les règles de l'art (^^): à l'avenir je vais probablement avoir besoin d'un nombre important de taches cron. J'ai donc essayé de passer par un shell.
Seulement je galère un peu (beaucoup) à l'écriture de la taches cron. Peut-être peux-tu m'aider ?
J'ai une tache écrite comme ceci :

/home/monespace/public_html/app/Console/cakeshell monShell monAction monArgument -cli /usr/bin -console /cakes/2.x.x/lib/Cake/Console -app /home/foglofr/public_html/app >> /home/monespace/public_html/app/tmp/logs/debug.log

J'ai suivi la doc pour la création du cakeshell et de l'ajout de "-cli /usr/bin -console /cakes/2.x.x/lib/Cake/Console -app /home/foglofr/public_html/app" (un peu compliqué à comprendre).
Seulement, ma tache me renvoi une erreur par mail (et non dans le log) :

bash: cake: No such file or directory

Je n'arrive pas à analyser ça. Le process passe bien par le cakeshell et la commande cake est bien envoyée. Mais la console n'est pas trouvée, ou mon shell, ou mon app ?
Cette ligne attire particulièrement mon attention : /cakes/2.x.x/lib/Cake/Console. Il ne me semble pas avoir de répertoire comme celui-ci ...

Ci je en parviens pas à passer par un shell, je me rabattrai dans tous les cas sur ta solution.

UPDATE :
J'ai modifié ma tache cron en ceci :

/home/monespace/public_html/app/Console/cakeshell monShell monAction monArgument -cli /usr/bin -console /home/foglofr/public_html/lib/Cake/Console -app /home/foglofr/public_html/app >> /home/monespace/public_html/app/tmp/logs/debug.log

Et j'obtiens dans le fichier debug.log cette erreur : "No input file specified." Je ne vois pas quoi faire. Je donne bien mes instructions à la console cake mais visiblement elle a besoin d'un fichier. Ou est-ce autre chose ?

EDIT :
J'essaye pleins de choses en fonction de ce que je trouve sur le web à droite à gauche. Ça ne marche toujours pas. Je deviens fou ! :D