Перенаправление вывода iostat в файл

Почему вывод iostat не перенаправляется в файл с помощью следующей команды:

iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization 

Iostat ведет себя иначе, чем любая другая команда?

Спасибо заранее

2 ответа

Решение

Похоже, вам нужно добавить счетчик, чтобы сообщить потоку, когда завершить ( man iostat). Вы только добавляете интервал:

If the interval parameter is specified without the count parameter, the iostat command generates reports continuously. 

Когда я пытаюсь:

iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile

6 говорит iostat останавливаться после 6 итераций с интервалами в 3 секунды. После итераций iostat завершается, и я получаю output файл.

В качестве альтернативы вы можете выбрать какое-нибудь выражение, чтобы скрипт awk завершился. Когда я пытаюсь:

iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2

Я получаю только 3 строки output2 что имеет смысл, потому что iostat -x производит около экрана количество строк вывода на экран.

Вы также можете заставить AWK fflush(stdout) в каждом цикле печати:

iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3

а затем закройте iostat с <ctrl+c> из скорлупы

Причина вашей проблемы в том, что канал буферизован (возможно, 4k), поэтому, если вы будете ждать достаточно долго, чтобы вывод был сброшен в файл, он больше не будет пустым.

Другие вопросы по тегам