Jeanluc Posté 10 Février 2009 Posté 10 Février 2009 Bonjour, J'ai des tâches PHP (et Perl) qui sont lancées par cron. Il arrive que certaines tâches ne s'exécutent pas correctement parce que l'information nécessaire n'est pas encore disponible. Dans ces cas-là, je sais que l'information sera probablement disponible 10 ou 20 minutes plus tard. Comment faire une relance automatique si possible à l'intérieur du script PHP ? Je cherche une méthode la plus "propre" possible. Jean-Luc
KaRaK Posté 10 Février 2009 Posté 10 Février 2009 Bonjour, Personnellement j'appellerai plusieurs fois le script via CRON à 30 minutes d'intervalle. Et dans le script un test supplémentaire au début à ajouter si la dernière exécution est récente (pas d'opération à faire) ou non (poursuivre le script).
jcaron Posté 10 Février 2009 Posté 10 Février 2009 Même genre: remettre effectivement la même opération en cron un peu plus tard (je ne sais pas quelle est la périodicité "originale", j'ai tendance à penser que c'est quotidien plutôt que toutes les heures?), et faire un test pour voir si la tâche a déjà été exécutée correctement. S'il n'y a pas de test évident, il suffit de créer une table SQL avec une seule ligne qui contient la dernière exécution réussie, ou même un fichier quelque part qui contient cette info. Jacques.
Jeanluc Posté 10 Février 2009 Auteur Posté 10 Février 2009 Merci pour les suggestions. Cela m'a permis de restructurer les choses. Voilà ce que je fais maintenant: 1. cron exécuté toutes les 15 minutes pendant toute la période de capture des infos 2. il lance un premier script qui vérifie d'abord s'il doit s'exécuter ou pas et qui se termine par un exit avec un code d'erreur si les infos ne sont pas disponibles 3. dans le shell script, après l'appel du premier script, j'ajoute if [ $? -ne 0 ]; then echo "Info non valide." exit 127fi Comme ça, le cron s'arrête si l'info n'est pas prête. Jean-Luc
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant