Есть ли способ запустить команду VMSTAT (или что-то в этом роде) и включить метку времени в строку? Я знаю, что могу передать вывод команды по конвейеру и манипулировать результатами, но если я это сделаю, я получу ненужную информацию; Мне сказали, что первая строка VMSTAT содержит фиктивные данные, и я бы получил повторяющийся список первых строк.
Есть ли способ получить такие данные с помощью VMSTAT или чего-то подобного:
20090826.134908 0 0 0 241832 120064 3023856 0 0 0 1 0 0 0 0 100 0
Спасибо!
IVR Мститель
while sleep 1 ; do echo `date '+%Y%m%d.%H%M%S'` `vmstat | head -3 | tail -1` ; done
vmstat -n 1 | (while read; do echo "$(date +%Y%m%d.%H%M%S) $REPLY"; done) | tail -n +3
Не уверен, что вы имеете в виду, говоря «если я [манипулирую результатами], я получу ненужную информацию». Вы можете сделать что-то вроде этого:
vmstat 8 | sed '3d'
Это удалит ту строку, которую всегда просят игнорировать. В качестве альтернативы, если вы хотите удалить это и заголовок:
vmstat 8 | sed '1,3d'
Это также позаботится о заголовке. Если заголовок повторяется, вы можете использовать что-то вроде этого:
vmstat 8 | sed '3d; /memory/d; /free/d;'
В моем случае «память» была в строке 1 и «свободна» в строке 2; замените их собственными соответствующими строками.
Вот быстрое и грязное решение:
while true; do date;vmstat 1 2|tail -n1; done
Первая строка, кстати, не подделка - она содержит средние значения с момента последней перезагрузки.
Я знаю, что могу передать вывод команды по конвейеру и манипулировать результатами, но если я это сделаю, я получу ненужную информацию.
Я не понимаю, что вы имеете в виду. Если команды не дадут вам желаемого результата, я не могу придумать ничего, кроме конвейерной передачи и форматирования вывода.
В любом случае, это создает нужный вам формат.
$ date=`date "+%Y%m%d.%H%M%S"` && vmstat=`vmstat | tail -1` && echo $date$vmstat
20090827.175715 3 1 8 116848 121072 599320 0 0 0 4 3 6 0 0 100 0
Сар может работать лучше:
Я бы порекомендовал команду sar, которая является частью пакета sysstat. По умолчанию это будет включать временные метки, и есть переключатели для получения всех видов данных. Самый простой вариант использования:
sar 1 3 #interval of 1, for a count of 3
См. 'Man sar', чтобы получить статистику памяти и подкачки.
Если вы используете vmstat:
Если вы собираетесь использовать vmstat, после заполнения терминала он снова распечатает заголовок (по крайней мере, в моей версии GNU), поэтому используйте переключатель -n, чтобы подавить это.