J'essaie de créer un script qui produira tous les processus obsolètes sur 66 boîtes redhat dans un seul fichier texte. Je comprends les principes de cette opération sur une boîte, mais je ne sais pas comment transformer ce processus en quelque chose qui fonctionnera sur une boîte, mais interroge plusieurs boîtes.
Alors, j'ai trouvé ce petit script :
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
Je comprends que je pourrais essentiellement soumettre ps -ef | grep "defunct"
comme la $command
, mais je pense que tout fichier de sortie que je crée sera déposé sur l'hôte sur lequel il s'exécute.
J'ai besoin de faire cette exécution à partir d'une boîte, en stockant la sortie sur cette boîte, mais contenant les informations pour les 65 autres boîtes ?
Je crois que nous avons mis en place ssh sans mot de passe. Ma connaissance d'Unix est en quelque sorte intermédiaire, j'en connais des bouts parce que j'utilise SAS.
Réponse acceptée :
La redirection se produit sur la machine appelante, pas sur la machine distante, donc le fichier de résultat sera local. Aussi, le grep
n'a pas besoin d'être exécuté à distance :
while read -r host; do
ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt
Cela exécute ps -ef
sur chaque hôte et grep
extraira le defunct
lignes de sortie. Le grep
fonctionnera localement, pas à distance. Le fichier de résultat est également créé localement.
Si vous souhaitez un seul fichier de sortie :
while read -r host; do
ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt
Ou même (pour une seule invocation de grep
)
while read -r host; do
ssh "$host" ps -ef
done <hosts.txt | grep "defunct" >output.txt