2009-12-15 5 views
1

J'ai accès à quelques grappes linux à l'école. parfois ils sont occupés et parfois ils ne le sont pas. Je me connecte habituellement dans chaque machine manuellement, utilisez la commande "top" pour voir si le serveur est occupé (pour voir si les deux cœurs sont utilisés). à partir de là, j'exécute mon programme pour utiliser des serveurs libres d'exécuter mes calculs. Ce que je voudrais faire est d'automatiser ce processus avec un script. supposons que j'ai une liste de serveurs, disons serveur1 ... serveur N. Je voudrais me connecter successivement à chacun de ces serveurs, exécuter une commande (top?), et afficher une liste de serveurs inutilisés deux premiers processus, indiquant le% de cpu, pour chaque serveur).automatiser: trouver des serveurs non-utilisés à partir d'une liste de serveurs

toute suggestion serait grandement appréciée.

+0

Beaucoup de gens ici ont de la chance d'avoir une seule machine à jouer. :) Je pense que les bash-hackers sur superuser.com pourront mieux vous aider. –

Répondre

0

Merci pour les suggestions. Voici mon script pour tous ceux qui sont intéressés:

#! /usr/bin/env bash 

out=avail.txt 
rm -rf ~/$out 
minLoad=1 
for h in $(cat ~/listofservers.txt); do 
    ##w | head -1 | cut -d : -f 5 - | cut -d "," -f 2 - 
    load=`ssh [email protected]$h uptime | cut -d : -f 5 - | cut -d "," -f 2 -` 
    comparison=`expr $load \< $minLoad` 
    if [ comparison ]; then 
     echo "$h" >> ~/$out 
     ##echo "$load" >> ~/$out 
    fi 
done 
0

Votre question m'a rendu curieux. Après avoir voté pour le fermer, j'ai trouvé la commande w.

Si vous deviez faire quelque chose comme

echo Host: host 
ssh [email protected] w 

dans un script, avec une paire de lignes pour chaque hôte que vous souhaitez visiter, vous pourriez obtenir à peu près ce que vous vouliez. Vous pourriez le finesse un peu avec head -1 sur la sortie de w pour voir seulement la ligne de charge.


Mise à jour, amélioré:

for h in host1 host2 host3; do 
echo host: $h `ssh [email protected]$h w | head -1` 
done 

Mise à jour, amélioré un peu plus:

for h in host1 host2 host3; do 
echo host: $h `ssh [email protected]$h uptime` 
done 
+1

... ou vous pourriez utiliser 'uptime' au lieu de' w | head -1';) – caf

+0

Je n'aurais jamais pensé chercher cette info en disponibilité ... merci! –

Questions connexes