Как регистрировать загрузку ЦП, но только когда она высока или касается определенного порога? (+ форматирование)

Для изменения одного символа trможет быть самым быстрым:

tr \' \" <infile >outfile

Обратите внимание, что обе кавычки необходимо экранировать в среде оболочки. Или для замены в этом же файле используйтеsponge(из пакета moreutils)

tr \' \" <infile | sponge infile
1
02.08.2020, 23:20
1 ответ

Некоторые подсказки:

sed 's/^/ /'

заменяет каждое начало строки пробелом.

uptime | sed 's/.*load average: //;s/,.*//'

показывает среднюю загрузку за последнюю минуту в виде дроби (CPU% ). Это может быть показателем того, насколько загружена ваша система.

Как предложил @Paul _Педант в своем комментарии:

top -b -n 1 | awk '/%Cpu/ || $1 == "PID" || $1 ~ /^[0-9]+/; NR >= 12 { exit; }' 

дает реальный процент ЦП.

Или, если вы предприимчивы и не возражаете против некоторого кода Python:

from __future__ import print_function
from time import sleep


last_idle = last_total = 0
with open('/proc/stat') as f:
    fields = [float(column) for column in f.readline().strip().split()[1:]]
idle, total = fields[3], sum(fields)
idle_delta, total_delta = idle - last_idle, total - last_total
last_idle, last_total = idle, total
sleep(1)
with open('/proc/stat') as f:
    fields = [float(column) for column in f.readline().strip().split()[1:]]
idle, total = fields[3], sum(fields)
idle_delta, total_delta = idle - last_idle, total - last_total
last_idle, last_total = idle, total
utilisation = 100.0 * (1.0 - idle_delta / total_delta)
print('%5.1f' % utilisation)

читает /proc/statи выполняет вычисления за вас.

date '+%F %R'

дает точно такой же результат, что и

echo "$(date '+%F %R')"

Возможно, вы захотите перенаправить вывод в свой журнал.

и, наконец,

top -bn 1 | sed '1,/PID *USER/d' | head -3

вероятно более надежен, чем ваша комбинация tailи head.

0
18.03.2021, 23:15

Теги

Похожие вопросы