Question Ajout d'un délai aléatoire pour une commande Linux


j'utilise func d'effectuer des commandes parallèles sur nos serveurs.

L'autre jour, nous avons eu un problème quand un redémarrage du service de puppet via func fait tous nos severs frapper notre puppetmaster en même temps.

Ma question: Comment puis-je exécuter la même commande exacte sur un ensemble de serveurs tout en ajoutant un délai avant son exécution sur les serveurs individuels?

Par exemple.: random_delay && service puppet restart

Je suis intéressé par le random_delay une partie de la commande.


8
2018-01-07 02:40


origine




Réponses:


sleep $((RANDOM % MAXWAIT)) où MAXWAIT est le délai maximum souhaité en secondes.


20
2018-01-07 02:42



Il semble que beaucoup de gens restent bloqués sur "1" si vous en faites écho ... Des pensées? - Corey S.
Remarqué cela aussi. Essayez ceci, pour x dans 1 2 3 4 5; RANDOM = $ x; i = $ ((RANDOM% 10)); echo $ i; dormir $ i; done Évidemment, MAXWAIT dans la réponse de S19N a un effet similaire à 10 dans ma réponse. Changez la graine RANDOM et ajoutez le code de la marionnette à ce que vous désirez bien sûr. - dtbnguyen
@CoreyS. $ RANDOM est en train d'ensemencer la dernière valeur, d'où le bouclage (je me suis retrouvé bloqué le 5/6/7, le 2/7 et le 5). sleep $((RANDOM % MAXWAIT)) est la bonne façon. Je vais modifier la réponse en tant que telle. - Jeff Ferland
C'est appelé évaser dans Pro Puppet. Il est utilisé pour empêcher un troupeau tonitruant, où de nombreuses machines font la même chose simultanément. En plus de cela, j'ai eu du succès avec la planification de cron en utilisant fqdn_rand. - François Beausoleil


J'aime assez la solution innovante de S19N, mais loin d'être idéale. Je dis seulement que c'est moins qu'idéal, car c'est toujours en grande partie non déterministe quand il se passera des choses. Je préférerais de beaucoup pouvoir garantir quand les choses vont arriver, et quelles choses vont arriver quand ça arrive.

L’orchestration de marionnettes est en fait un difficile problème.
L’une des solutions "exemplaires" consiste à utiliser MCollective ce qui vous permettra non seulement de configurer le moment où marionnette s’exécute sur votre cluster de machines, mais vous pouvez également l’utiliser pour d’autres problèmes d’orchestration similaires.


1
2018-01-07 11:41