использование полосы пропускания журнала ifstat

#bash

#bash

Вопрос:

я только что узнал, что ifstat отображает использование сети, и приведенная ниже команда выдает то, что я хочу, на экране консоли

 /usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2}'
  

я хочу вывести это в файл, чтобы я мог использовать библиотеку javascript для вывода этих значений..

но, похоже, я не могу выводить журналы в файл

 /usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2}' > bandwidth.txt
  

bandwidth.txt пусто

может кто-нибудь посоветовать, как записать использование полосы пропускания сети в файл (collectl кажется интересным, но не может понять, как получить uplaod и загрузить статистику)

Ответ №1:

awk буферизует свои выходные данные. Обычно большинство программ используют буферизацию строк, когда stdout является терминалом, но переключаются на больший размер буфера, когда stdout не является терминалом, и awk не является исключением. Если вы выполняли свою команду достаточно долго, вы в конечном итоге увидите, что размер файла увеличивается порциями размером 4096 или около того (возможно, больше или меньше) по мере заполнения буфера и его очистки.

Чтобы заставить awk очищать свой буфер после каждой строки, независимо от того, является ли стандартный вывод терминалом, добавьте fflush() команду:

 /usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2; fflush()}' > bandwidth.txt