У меня есть задача, которая с течением времени потребляет процессор и память. Он дает мне выход, выполняющий следующую команду linux:
mpstat -u 1 -P ALL
Результат выглядит так:
02:22:14 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
02:22:15 PM all 4.51 0.00 0.11 0.00 0.00 0.00 0.00 0.00 95.37
02:22:15 PM 0 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00
02:22:15 PM 1 **78.22** 0.00 0.99 0.00 0.00 0.00 0.00 0.00 20.79
02:22:15 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
02:22:15 PM 20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:15 PM 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Я хочу захватить значение, расположенное в 4-м столбце и 3-й строке a [3] [4], т.е. 78,22 каждые 20 секунд в bash/python/perl. Таким образом, сценарий, который я хочу, выполнит команду mpstat и распечатает значение в указанном столбце и на основе значений, которые он создает граф. Я думал о добавлении требуемого значения в файл.dat и запускает gnuplot и/или приложение, которое создает граф.
Любое предложение о том, как идти?
Вы можете получить 3-й ряд и 4-я ячейка, используя awk
. Следующий код захватывает эту ячейку из вывода mpstat
и добавляет ее вместе с текущей меткой времени UNIX в файл статистики.
mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), $4}' >> stats.txt
Для запуска этой команды каждые 20 секунд:
watch -n 20 "mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), \$4}' >> stats.txt"
Затем заговор с gnuplot
:
cat stats.txt | gnuplot -p -e 'set datafile separator " "; plot "-" using 1:2 with lines'
Попробуйте следующее
#!/bin/bash
function _mpstat() {
while :; do
arr=( $(mpstat -P 1 | tail -n 1) )
echo "${arr[3]}"
sleep 20
done >> file.txt
}
_mpstat &
echo "_mpstat PID: $!"
объяснение
while :; do
while :; do
бесконечную петлю$(mpstat -P 1 | tail -n 1)
Mpstat только cpu 1 -P 1
и tail -n 1
последняя строка, возвращаемое значение $()
arr=(... )
Команды возвращают значение в массивecho "${arr[3]}"
индекс эхо-массива 3sleep 20
Сон в течение 20 секунд>> file.txt
Отправьте stdout в файл внутри цикла while._mpstat &
Отправить функцию в фоновый процесс &
echo "_mpstat PID: $!
Возвращает PID функцииВы можете grep PID отобразить своего родителя и убить как при необходимости.