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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top