Redirection de la sortie iostat vers un fichier
Question
Pourquoi la sortie de iostat n'est pas redirigée vers le fichier dans la commande suivante :
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
iostat se comporte-t-il différemment de toute autre commande ?
Merci d'avance
La solution
On dirait que vous devez ajouter un décompte pour indiquer au flux quand se terminer ( homme iostat ).Vous ajoutez uniquement l'intervalle :
If the interval parameter is specified without the count parameter, the iostat command generates reports continuously.
Quand j'essaye :
iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile
le 6
raconte iostat
pour s'arrêter après 6 itérations à 3 secondes d'intervalle.Après les itérations iostat
se termine et j'obtiens un output
déposer.
Alternativement, vous pouvez choisir une expression pour provoquer la fermeture du script awk.Quand j'essaye :
iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2
Je reçois seulement 3 lignes output2
ce qui est logique parce que iostat -x
produit environ un écran de lignes de sortie à l'écran.
Vous pouvez également forcer awk à fflush(stdout)
à chaque cycle d'impression :
iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3
puis fermez iostat
avec un <ctrl+c>
de la coquille.
Autres conseils
La cause de votre problème est que le canal est mis en mémoire tampon (probablement 4k
), donc si vous attendez suffisamment longtemps pour que la sortie soit transférée dans le fichier, elle ne sera plus vide.