J'ai une architecture de maître-ouvrier où le nombre de travailleurs augmente chaque semaine. Je ne peux plus m'attendre à ce que SSH ou console à distance dans chaque machine pour tuer le travailleur, faire une synchronisation de contrôle de source, et redémarrer. J'aimerais que le maître mette un message sur le réseau pour que chaque machine synchronise et redémarre.Est-ce qu'un script Ruby autonome (windows et mac) peut être rechargé et redémarré?
C'est là que j'ai franchi un barrage routier. Si j'utilisais une plate-forme saine, je pourrais juste faire:
exec('ruby', __FILE__)
... et être fait. Cependant, je l'ai fait le test suivant:
p Process.pid
sleep 1
exec('ruby', __FILE__)
... et sur Windows, je reçois une instance ruby pour chaque appel à exec. Aucun d'entre eux ne meurt jusqu'à ce que j'atteigne^C sur la fenêtre en question. Sur chaque plate-forme, j'ai essayé, il exécute la nouvelle version du fichier à chaque fois, ce que j'ai vérifié en faisant des modifications simples au script de test pendant que le test marchait le long.
La raison pour laquelle j'imprime le pid est de vérifier le comportement que je vois. Sur Windows, j'obtiens un pid différent à chaque exécution - ce à quoi je m'attendrais, étant donné que je vois un nouveau processus dans le gestionnaire de tâches pour chaque exécution. Le mac se comporte correctement: le pid est le même pour chaque appel système et j'ai vérifié avec dtrace que chaque exécution est en train de déclencher un appel à l'appel système syscall. Donc, en bref, existe-t-il un moyen d'obtenir un script windows ruby pour redémarrer son exécution afin qu'il exécute tout code - y compris lui-même - qui a changé pendant son exécution? S'il vous plaît noter que ce n'est pas une application de rails, même si elle utilise activerecord.
Si je comprends bien, il y a 2 problèmes, un, il n'y a aucun moyen que vous pouvez signaler le processus maître sous Windows pour déclencher le redémarrage de lui-même. Le second, est que lorsque "exec" est effectué, ne prend pas le code mis à jour. Pouvez-vous confirmer cela? –