Script qui boucle en mutualisé ?

Résolu/Fermé
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 - Modifié par jiantox le 2/01/2016 à 13:31
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - 5 janv. 2016 à 22:11
Bonjour,

j'ai un soucis assez simple : Actuellement j'ai créé une sorte de "robot" en ajax qui tourne quand je suis sur la page et je suis le seul a pouvoir le lancer.
Ce "robot" récupère des valeurs en base de donnée et les renvoie sur ma page quasi instantanément.

Ce que je voudrais c'est que ce robot puisse tourner 24h/24h.

J'ai tout d'abord penser à faire un while infini, avec un sleep histoire de pas trop forcer sur le serveur. A ceci deux problèmes se posent : comment l'arrêter manuellement si besoin, et je crois savoir que chez ovh les serveurs font sauter les scripts qui bouclent tous les jours.

Suite à ce deuxième problème j'ai donc penser à faire une simple fonction php sans while mais qui s'appelle elle même après le sleep. A tester.

Sachant que je suis sur un mutualisé je ne sais pas trop comment m'y prendre, d'autant qu'il faudrait que ce script ne soit appeler que par une seule personne/machine et qu'il puisse interagir instantanément avec mes bases de données.

Si vous avez des idées/solutions, merci d'avance !

6 réponses

ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
3 janv. 2016 à 04:36
Personnellement, je téléguiderais plutôt ça d'une machine sur laquelle j'ai la main, genre un serveur chez moi, même si ça expose à une interruption du lancement si la machine qui contrôle le truc est déconnectée du net ou éteinte. Après c'est peut être pas la meilleure façon de faire.
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
3 janv. 2016 à 11:25
Oui ce serait le mieux mais je ne dispose pas de serveur maison et je n'ai pas très envie de faire tourner un pc 24/24 ^^
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 3/01/2016 à 13:20
J'avais un doute, parce que je l'ai jamais utilisé mais chez OVH il y a la possibilité de lancer des tâches planifiées ...

https://docs.ovh.com/fr/hosting/mutualise-taches-automatisees-cron/

Cependant parmi les limitations :

Limitations

En hébergement mutualisé, il n'est pas possible de configurer les minutes à laquelle la tâche automatisée doit s’exécuter. De plus, celle-ci ne peut être exécutée qu'une fois par heure.


Contrairement au dédié avec lequel on peut faire ce qu'on veut ... https://docs.ovh.com/fr/

Pour l'arrêt sur demande, l'écriture/dépot/effacement par ftp d'un petit fichier sur le serveur (scriptable depuis ton poste client avec curl), fichier dont l'existence serait testée dans le script du serveur. C'est un peu barbare mais c'est le premier truc qui me vient à l'esprit :-) Ne pas oublier de l'effacer quand on veut relancer ...

Je ne sais pas suivant quelle fréquence tu veux lancer ta tâche. Il doit être possible d'essayer ton sleep dans un while true qui s’arrête au bout de 59 mn sinon, au risque de recevoir un mail d'ovh. Voir si il y a une marge de tolérance de ce coté et a quelle niveau elle se situe (seconde(s) / minute(s) ?).

You may stop me but you can't stop us all   ;-)
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
3 janv. 2016 à 13:10
Il faut que mon script boucle plusieurs fois par secondes :/
Oui en dédié je serais tranquille mais c'est pas le même budget ^^.

Merci quand même pour ces propositions
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
3 janv. 2016 à 13:27
>> plusieurs fois par secondes :/


Ah oui violent quand même :p
J'espère que tu auras des réponses ... Sinon tiens nous au courant ça m'intéresse de connaitre la suite ...
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
3 janv. 2016 à 15:31
Je viens de tomber la-dessus.

https://forum.ovh.com/showthread.php/106954-T%C3%A2che-cron-avec-boucle-while-infinie-autoris%C3%A9e

Donc va falloir que tu trouves une autre solution.
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
3 janv. 2016 à 16:03
Arf :/ merci quand même
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
3 janv. 2016 à 16:15
Bonjour,


Je n'ai aucune solution à te proposer .... mais
moi j'ai un souci concernant ton besoin......

j'ai un soucis assez simple : Actuellement j'ai créé une sorte de "robot" en ajax qui tourne quand je suis sur la page et je suis le seul a pouvoir le lancer.
Ce "robot" récupère des valeurs en base de donnée et les renvoie sur ma page quasi instantanément.


L'ajax ne peut être utilisé (et ne toutes façons ne sert....) QUE dans une page AFFICHEE ...... (surtout quand c'est juste pour actualiser le contenu d'une page.....)

Quel est l’intérêt de vouloir le faire tourner lorsque personne n'est sur la page en question ?
Pöurquoi ne pas actualiser le contenu de la page .... que quand quelqu'un est dessus ???



0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
3 janv. 2016 à 16:48
Le but de ce robot est qu'il insère à interval régulier (genre toute les 5 mins) une donnée en bdd. Hors si il est activé en ajax, chaque utilisateur va le faire boucler.
Il faudrait alors qu'il soit activer que par une seule personne (moi) mais je ne peux pas laisser un pc tourner 24/24 pour ça.
Ce que ce robot doit aussi faire c'est vérifier à interval beaucoup plus réguliers (plusieurs fois par seconde pour être le plus instantané possible) le contenu d'une base de donnée.

Je viens de penser à une solution que je testerais prochainement :

Lorsqu'un utilisateur se connecte, il lance l'ajax. Dans mon script je vérifie grâce à une valeur en bdd si le script à déjà été activé par quelqu'un d'autre (si le "robot" est en train de tourner).
- Si non, j'actualise la valeur de la bdd et l'utilisateur crée la boucle depuis son navigateur.
- Si oui, le script ne fait rien puisque l'autre personne est déjà en train de le faire tourner.

Du coup lorsque la personne qui le fait tourner se déco je vérifie grâce à un autre visiteur si une valeur timestamp est toujours à jour, si oui c'est que l'utilisateur est co et que le robot tourne toujours, si non ce nouvel utilisateur fait tourner le robot.

Le hic c'est : si l'ajax qui tourne chez plusieurs utilisateurs en même temps "prend la main" sur le robot en même temps, il va se mettre à tourner de travers (se déconnecter vu que quelqu'un est connecté, se reconnecter vu que plus personne ne l'active...)

qu'en pensez-vous ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019
3 janv. 2016 à 18:49
Je pense qu'il y un souci de conception....


-Et... Que se passe-t'il si, pendant un certain laps de temps, personne n'est connecté à ton site ?

-Quelle est donc cette information qui doit absolument être mise à jour toutes les secondes et qui ne saurait être calculée uniquement lors de l'affichage de la page ??
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
3 janv. 2016 à 19:15
Lorsque personne n'est connecté au site, il ne se passe rien du coup.

Cette information mise à jour très souvent ne l'est que quand certaines valeurs se trouve dans ma base de donnée. Et ces valeur est envoyée en ajax par l'utilisateur.

Le soucis en soit n'est pas dans cette requête récurrente puisque le "robot" peut être appelé au moment ou l'utilisateur envoie l'info, mais dans l'insertion de l'info à intervalle régulier

En gros je reformule le problème :
Comment insérer une ligne en bdd à intervalle régulier ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019
3 janv. 2016 à 20:04
Pas besoin de reformuler ..... j'avais très bien compris ce que tu voulais faire....
mais moi j'essaie de te faire comprendre que ce que tu souhaites faire.... n'est peut-être (même sûrement...) pas LA meilleur façon de faire !

Donc je vais essayer moi aussi de reformuler :
Qu'est-ce qui justifie le fait de faire une insertion en BDD à intervalle régulier (que si des utilisateurs sont connecté qui plus est....) ??????

Pourquoi ne pas simplement effectuer le calcul (car je suppose que ce sont des calculs... ) lorsque tu en as besoin (au moment de l'afficher ... et non en arrière plan via un pseudo robot à la noix..... qui ne saurait, de toutes façons être fait en AJAX )

tant que tu n'auras pas répondu à ces questions.... IMPOSSIBLE de t'aider !

0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
3 janv. 2016 à 20:32
Et bien tout simplement pour afficher une information à tout les utilisateurs au même moment.
De cette manière même si un utilisateur arrive 3 minute après un autre, ils auront le message quand même en même temps
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
Modifié par totodunet le 3/01/2016 à 22:08
Bonjour,

Il y a des choses qui m'échappent dans ton sujet. Tu dois te mélanger entre serveur et client. AJAX est une technologie côté client on est d'accord. Je ne comprend pas pourquoi ton robot écrit en AJAX (donc présent au niveau client), tu veuilles le faire tourner 24h/24.

Si je pense savoir ce que tu veux faire, à savoir une interaction en continue entre ton serveur et ton client (d'où le pourquoi tu as fait des boucles dans ton script Ajax), renseignes-toi plutôt sur la techno WebSocket (qui fonctionne par un système de notifications lors d'un changement d'état). Elle a été conçue pour ça. Après pour des insertions en BDD, j'ai dû mal à savoir ce que tu dois insérer toutes les xx secondes.

Qui ne tente rien n'a rien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
4 janv. 2016 à 10:17
C'est pas très facile d'expliquer, d'autant que sous contrat je ne peut rien dire de concret :/

En gros pour le soucis de la vérification en bdd toute les secondes j'ai fait autrement.

Où je bloque toujours c'est en gros pour insérer une valeur en bdd toute les 5 minutes disons.
Le faire en ajax s'avère compliqué étant donné que chacun des utilisateurs va l'activer.

Du coup la question initiale est maintenant :
Comment insérer une valeur en bdd à intervalle de temps précis ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
4 janv. 2016 à 10:21
..........Oo.......
Je ne vois aucune solution pour faire tourner un script sur un serveur mutualisé ....
Et A mon avis... cela n'est pas nécéssaire ....
Mais .....malheureusement ..... vu que nous ne savons toujours pas ..... quelle type d'information doit être, selon toi, insérée en BDD toutes les x minutes..... IMPOSSIBLE de te répondre.
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
4 janv. 2016 à 10:27
C'est une simple phrase qui doit être insérée toute les minutes. Mais je veux qu'elle soit en bdd pour pouvoir être affichée en ajax simultanément chez tous les utilisateurs.

sinon j'aurais fait une simple requête ajax qui boucle toute les 5 mins chez l'utilisateur uniquement mais, étant donné que les gens n'arrivent pas forcément en même temps, ils n'auraient pas eu l'info en même temps.

D'où mon intérêt de vouloir insérer une valeur toute les 5 minutes. Comme ça lorsqu'elle se trouve dans ma base de donnée, mon script qui boucle (et vérifie si une nouvelle valeur a été ajoutée) l'affiche, à tout le monde, en même temps.
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
4 janv. 2016 à 12:45
" sinon j'aurais fait une simple requête ajax qui boucle toute les 5 mins chez l'utilisateur uniquement mais, étant donné que les gens n'arrivent pas forcément en même temps, ils n'auraient pas eu l'info en même temps. D'où mon intérêt de vouloir insérer une valeur toute les 5 minutes. "

c'est là que je comprend pas très bien
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114 > totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020
4 janv. 2016 à 12:56
Eh bien étant donné que la valeur est en bdd et que j'ai un script qui tourne plusieurs fois par seconde, la valeur est forcément affiché chez tout le monde en même temps (à quelques dixièmes de secondes près)

Si j'avais fais une requête qui boucle que toute les 5 min en ajax, ou même en JS du coup, quelqu'un qui serait arrivé 3 min après l'autre aurait 3 min de décalage.

Pour que les utilisateurs aient une information tous au même moment, je ne vois pas d'autre alternative. Du coup pour ce qui est de la récupération de la valeur en instantané je n'ai pas de soucis. Le problème vient de la façon d'insérer cette fameuse valeur (qui peut varier) toute les 5 minutes
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
4 janv. 2016 à 14:39
Cette fameuse phrase doit être saisie par l'utilisateur ou il s'agit de phrases déjà écrites à l'avance sur laquelle l'utilisateur n'a aucune influence ?
0
Gutierrez345 Messages postés 3 Date d'inscription mercredi 30 décembre 2015 Statut Membre Dernière intervention 6 janvier 2016
5 janv. 2016 à 13:49
C'est un peu barbare mais c'est le premier truc qui me vient à l'esprit...
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
5 janv. 2016 à 13:53
quoi donc ?
0