Bash-скрипт для оценки загрузки ЦП

Если информация «выполнено» или «не выполнено» не очень конфиденциальна, вы можете использовать инструмент чата командной строки. Например, клиент XMPP, такой как mcabber. В этом случае вам потребуется соответствующий онлайн-аккаунт. Может быть, взгляните на mcabber .

Чтобы использовать электронную почту, ваше имя пользователя/пароль не обязательно должны быть внутри вашего скрипта. Если вы управляете Linux-сервером, вы можете установить локальный почтовый сервер (, postfix, exim4,... )и использовать локальную почтовую команду. Но если этим сервером управляет кто-то другой, ваш пароль по-прежнему находится (root ), доступный в файле конфигурации.

Если вы не против приобрести дополнительную (сотовую )сим-карту, есть возможность отправить сообщение WhatsApp через командную строку :см. yowsup на github. Насколько я помню, сим-карта не должна использоваться ни для одного телефонного номера, чтобы ее можно было зарегистрировать скриптом. Но вы должны разобраться сами, потому что я просто помню этот проект, но никогда не использовал его сам.
Это статья из журнала Linux, в которой описывается способ регистрации сим-карты. Может быть, у вас есть доступ к этому журналу?

Надеюсь, этот пост будет вам полезен...

1
22.08.2019, 20:44
1 ответ

Я думаю, вы хотите, чтобы строка cpu Usageотображалась в той же строке каждый раз и сразу же после строки cpu Idle. К добиться того, что вы можете использовать клеммы tputиel(clr_eol)возможность удалить строку иcuu(parm_up_cursor)переместить n строк вверх. Вы можете прочитать о возможностях терминала в man terminfo. Твой скрипт будет выглядеть так:

#!/bin/bash

PREV_CPU_USE=0
PREV_CPU_IDLE=0
PREV_EPOCH_TIME=0

# Setting the delimiter
IFS=$'\n'
counter=0

while true; do
  # Getting the total CPU usage
  CPU_USAGE=$(head -n 1 /proc/stat)

  # Getting the Linux Epoch time in seconds
  EPOCH_TIME=$(date +%s)

  # Splitting the /proc/stat output
  IFS=" " read -ra USAGE_ARRAY <<< "$CPU_USAGE"

  # Calculating the used CPU time, CPU idle time and CPU total time
  CPU_USE=$((USAGE_ARRAY[1] + USAGE_ARRAY[2] + USAGE_ARRAY[3] + USAGE_ARRAY[6] + USAGE_ARRAY[7] + USAGE_ARRAY[8] ))
  CPU_IDLE=$((USAGE_ARRAY[4] + USAGE_ARRAY[5]))

  # Calculating the differences
  DIFF_USE=$((CPU_USE - PREV_CPU_USE))
  DIFF_IDLE=$((CPU_IDLE - PREV_CPU_IDLE))
  DIFF_TOTAL=$((DIFF_USE + DIFF_IDLE))
  DIFF_TIME=$((EPOCH_TIME - PREV_EPOCH_TIME))

  printf "\r%s%s Usage: %d (counter = %d)\n" "$(tput el)" "${USAGE_ARRAY[0]}" "$((DIFF_USE*100/(DIFF_TOTAL*DIFF_TIME)))" "$counter"
  printf "\r%s%s Idle: %d (counter = %d)" "$(tput el)" "${USAGE_ARRAY[0]}" "$((DIFF_IDLE*100/(DIFF_TOTAL*DIFF_TIME)))" "$counter"
  counter=$((counter + 1))

  tput cuu 1

  # Assigning the old values to the PREV_* values
  PREV_CPU_USE=$CPU_USE
  PREV_CPU_IDLE=$CPU_IDLE
  PREV_EPOCH_TIME=$EPOCH_TIME

  # Sleep for one second 
  sleep 1
done

Я добавил дополнительную counterпеременную для целей отладки. Это увеличивается после каждой печати, чтобы сообщить пользователю, что старая строка заменяется новой строкой на экране.

Я также заменил ваши звонки на echoна printf, так как это удобнее.

1
28.04.2021, 23:30

Теги

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