JeuWeb - Crée ton jeu par navigateur
cron se lance 2 fois - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : cron se lance 2 fois (/showthread.php?tid=6929)

Pages : 1 2 3


cron se lance 2 fois - starmindfr - 24-02-2014

bonjour

j'ai un problème assez étrange et le technicien de l’hébergement ne trouve pas grand chose

je suis sur un hébergement avec cpanel, et un utilitaire cpanel pour la gestion des "cron"

j'ai mis dans des pages php mon code sql a traiter

http://xxx.com/toto.php

si je lance a la main l'url aucun problème

par contre en passant par le cron j'ai 2 fois le code sql executé

pour le cron j'ai donc une ligne exemple 42 * * * * curl --request GET 'http://xxx.com/toto.php'

j'ai essayer pas mal de choses, comme un timestamp, récupérer le pid / gid tout est identique, et l'hebergeur me confirme que leur système ne fait tourner qu'un cron sur mon hébergement.


Des idées ? j'ai tenter de remplacer curl par pas mal de choses qui passent bien mais toujours le doublon...

Et dans mon interface cpanel bien sur la ligne du cron est unique. tous mes crons ont le même problème.


RE: cron se lance 2 fois - GeGe_KAT - 24-02-2014

Salut,

Pas de solution particulière, mais peut-être un conseil pour débugger... J'avais déjà eu des soucis avec les appels automatisés de scripts php avec cron : j'avais du passer par un script sh pour que ça fonctionne correctement (au lieu d'appeler directement la page comme tu le fais). Mon appel "php -f path/to/file" était mis dans un script sh lui-même appelé par le cron.

L'avantage, c'est que tu pourras débugger plus facilement à l'aide du script (vu que tu peux y ajouter des "echo toto > file", et en dehors du script php lui-même). Tu verras si le script sh est appelé 2 fois ou si seulement le php est exécuté deux fois...

PS : c'est mal ce type d'url comme exemple... Assez NSFW... Smile


RE: cron se lance 2 fois - starmindfr - 24-02-2014

oui il y a de l'idée, cependant je recois le mail d'output de la tache cron, surtout en cas d'echec total, en double aussi avec quasi la meme date / seconde ce qui me laisse penser que c'est pas trop la peine d'essayer de creuser le script lui meme ?


RE: cron se lance 2 fois - GeGe_KAT - 24-02-2014

Hum, si tu reçois le mail le mail en double, c'est pas sûr que ça t'avance de passer par un script pour tester, uai... Sad

Après, ça peut être un truc à la con du style : avoir deux processus crond qui tournent en parrallèle (c'est possible d'en lancer plusieurs en parrallèle, un par le service et un qui serait lancé à la mano ou par erreur, par ex). Dans ce cas, tout serait appelé en double (je viens de faire le test pour être sûr).

Si tu as un shell sur ta machine (ou équivalent), tu peux voir combien de cron tournent voir avec : ps aux | grep cron.

PS : Ce qui était NSFW c'était la racine de l'url, pas les arguments de fin. Smile


RE: cron se lance 2 fois - starmindfr - 24-02-2014

non justement l'hebergeur bloque le ps et le crontab -l donc sur le shell je n'arrive pas a voir :$
ils disent qu'il n'est pas en double de ce qu'ils ont vu.

justement j'avais commencer a tester des parametre pour voir quel id de process lance le script mais ca semble pas tres pertinent vu que c'est peut etre un process global


RE: cron se lance 2 fois - niahoo - 24-02-2014

Bon en attendant de trouver il te faut stocker la date à laquelle ton script part, et au démarrage du script vérifier qu'il a bien été lancé pour la dernière fois avant xxx secondes.


RE: cron se lance 2 fois - GeGe_KAT - 24-02-2014

Arf, c'est dommage. Plus trop d'idées.

Je voulais te dire de voir si ce que vallait les ppid (savoir si c'était le même process qui les lancent), mais apparement tu dis que les pid sont toujours identiques, donc on aura le même ppid.
Par contre, ça peut peut-être les intéresser (au support) de savoir si c'est bien le bon crond, que eux pensent voir, qui lance effectivement la tâche.

[spoiler]Au cas ou :
Dans ton cron, tu appeles un script (au lieu du php direct) et tu rediriges la sortie (sans écraser le fichier, surtout) :
Code :
42 * * * * /tmp/test.sh >> /tmp/debug

Dans le script :
Code :
#!/bin/sh
whoami
echo "pid="$$
echo "ppid="$PPID
curl --request GET 'http://monurl.com/toto.php'

Ca te donnera peut-être une piste supplémentaire et ça leur permettra de comparer ce PPID avec le PID de leur cron qui tourne...[spoiler]


RE: cron se lance 2 fois - starmindfr - 24-02-2014

merci je vais tester ca, en sachant que bizarrement de temps en temps les taches ne sont plus dedoublées je me demande s'il n'y a pas une sorte de "retry"

edit : j'ai bien tout en double a l'identique dans le fichier output :

userxxx
pid=3
ppid=2
userxxx
pid=3
ppid=2
<script>top.location = '/xxx.php';</script>
<script>top.location = '/xxx.php';</script>
userxxx
userxxx
userxxx
pid=3
ppid=2
userxxx
pid=3
ppid=2
<script>top.location = '/xxx.php';</script>
<script>top.location = '/xxx.php';</script>

Pour les dates de demarrage du script j'ecrit dans la base sql les dates et j'ai 0 a 1 seconde de différence entre les 2 dates des doublons, j'ai aussi un compteur qui m'indique que ce n'est pas le meme script (remise a 0).

Un des cron a l'air maintenant de ne plus faire de doublons, sur les 4 crons ...


RE: cron se lance 2 fois - starmindfr - 25-02-2014

bon j'ai "coutourner" le probleme en ecrivant un fichier de lock, et sautant le script si le fichier existe encore... ca evite que le doublon ne refasse le script mais c'est pas la joie :langue2:


RE: cron se lance 2 fois - niahoo - 25-02-2014

tu peux aussi faire un dump de ta variable $_SERVER, tu y trouveras peut-être quelque chose d'intéressant. N'est-il pas possible de lancer le script en CLI plutôt que en faisant une requête ?