JeuWeb - Crée ton jeu par navigateur
CRON avancé? - 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 avancé? (/showthread.php?tid=612)



CRON avancé? - Argorate - 15-05-2014

Bonjour,

j'aimerais savoir quel solutions sont possible si on veux définir des taches quotidienne en seconde par exemple?

Es-ce une bonne idée de faire un script avec une boucle infini et un sleep() d'une seconde pour simuler un CRON?

D'autres solutions?

thx.


RE: CRON avancé? - Xenos - 15-05-2014

La précision de CRON est à la minute près.
Donc, impossible de faire exactement chaque seconde.

Une alternative: lancer toutes les minutes un script qui reboucle 59 fois (donc qui fait 60 calculs), espacés d'une seconde.

Mais un CRON toutes les secondes reflète certainement une mauvaise conception...


RE: CRON avancé? - Sephi-Chan - 15-05-2014

Comme d'habitude, le plus pertinent est d'évoquer le besoin (une fréquence d'exécution élevée) que l'envie (un CRON chaque seconde).

Quel est le cas d'utilisation ?


RE: CRON avancé? - Argorate - 15-05-2014

Si tu as des events à déclancher à la seconde pret et qui peuvent démarrer n'importe quand, par exemple.
Ou si tu veux faire quelque chose deux fois (ou plus) par minute...

Je me demande si ça marche de "/2"? Pour les jours, avec le crontab tu peux dire "*/2", ça va le faire un jour sur deux, du coup je me demande si on peut faire pareil pour les minutes ?


RE: CRON avancé? - Xenos - 15-05-2014

Alors tu peux ajouter la tache à la date donnée, arrondie à la minute inférieure, et utiliser un sleep, soit dans le script (PHP?) soit dans le shell.

Supposons une commande à lancer le 15/05/2014 à 16:17:42

16 17 5 15 ? 2014 sleep 42 && CommandAExecuter

A tester, car je n'ai pas de quoi vérifier que cela marche, mais le principe me semble bon (lancer la tâche dans la minute précédent la date d'exécution, et passer par un sleep/attente).


RE: CRON avancé? - Sephi-Chan - 15-05-2014

Moi je partirais plutôt sur un scheduler comme Sidekiq qu'une bricole à base de cron ou de at.

Après aucun programme de ce type (à ma connaissance) ne garantit l'exécution à la seconde près, c'est toujours du best effort.


RE: CRON avancé? - DrXela - 19-05-2014

De toute façon, un cron "à la seconde" c'est une erreur de conception...
Si c'est pour calculer les ressources, faut pas le faire toutes les secondes, mais au chargement de la page par le joueur, et/ou toutes les 5 ou 10 minutes...
De même sur un timer, tu met garde la date "actuel" et la date de fin de ton action, le timer js est coté client uniquement, et déclenche une action qui recharge la page à la fin pour changer la date "actuel", si la date actuel >= la date fin, tu finis l'action. Si le js s'est mal executé, et qu'il a été trop court, ca continue le timer (il arrive d'avoir des décalages de quelques secondes sur certains jeux web) et si le timer a été trop long, pas grave, ca se voit pas...


RE: CRON avancé? - Sephi-Chan - 19-05-2014

(19-05-2014, 01:38 PM)DrXela a écrit : De toute façon, un cron "à la seconde" c'est une erreur de conception...
Si c'est pour calculer les ressources, faut pas le faire toutes les secondes, mais au chargement de la page par le joueur, et/ou toutes les 5 ou 10 minutes...
De même sur un timer, tu met garde la date "actuel" et la date de fin de ton action, le timer js est coté client uniquement, et déclenche une action qui recharge la page à la fin pour changer la date "actuel", si la date actuel >= la date fin, tu finis l'action. Si le js s'est mal executé, et qu'il a été trop court, ca continue le timer (il arrive d'avoir des décalages de quelques secondes sur certains jeux web) et si le timer a été trop long, pas grave, ca se voit pas...

Les scripts exécutés à la demande ne sont pas toujours la panacée non plus, il faut faire attention. L'exécution asynchrone est une bonne chose dans la majorité des cas car elle soulage les processus Web.