Pour la boucle et le sommeil dans le script bash
J'ai un script bash avec une boucle for, je veux dormir pendant X secondes.
#!/bin/sh
for i in `seq 8`;
do ssh w$i 'uptime;
ps -elf|grep httpd|wc -l;
free -m;
mpstat';
done &
pid=$!
kill -9 $pid
Dans Bash: sleep 2
dort pendant 2 secondes. Je veux tuer le pid automatiquement après 2 secondes.
Insérez
ce n'est pas ce qu'il veut. Il voulait tuer
OP dit de le tuer si la boucle dure plus de 2 secondes.
Le
Pourrait aussi faire un wrapper et ne
sleep 2
avant la kill
ligne.ce n'est pas ce qu'il veut. Il voulait tuer
for
si elle prend trop de temps, ne pas attendre 2 secondes après exec puis la tuerOP dit de le tuer si la boucle dure plus de 2 secondes.
sleep 2
ferait que, précisément. Si le processus est terminé, kill
serait un no-op (les chances de tous les autres processus de l'acquisition de la même PID serait slim).Le
done &
ligne a une &
qui bifurque les travaux de la boucle for comme un processus distinct. Ce processus est toujours en cours comme les prochaines lignes exécuter. Sans un sommeil, l'enfant l'exécution de la boucle for serait tué immédiatement.Pourrait aussi faire un wrapper et ne
timeout 2 script
OriginalL'auteur Tomas | 2014-04-03
Vous devez vous connecter pour publier un commentaire.
Comme suggéré dans les commentaires
Dans cette version, un processus ssh peut rester en vie pour toujours. Alors peut-être il serait mieux pour tuer chaque commande ssh séparément:
OriginalL'auteur Mathias
Vous avez besoin de mettre votre boucle dans une enveloppe:
Votre script (je l'appelle
foo.sh
)Le wrapper
Vous pouvez également vérifier si votre processus existe déjà par
ps -p $pid -o pid | grep $pid
OriginalL'auteur drkunibar