Перенаправление вывода 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
), поэтому, если вы будете ждать достаточно долго, чтобы вывод был сброшен в файл, он больше не будет пустым.