Выполнение команды при загрузке ЦП ниже 80%

flashplugin -несвободный в настоящее время недоступен в стабильной версии Debian 9 Stretch. Вы можете найти его в нестабильном репозитории, но пакет по-прежнему (! )есть следующая ошибка (Я думаю, что чувак bartm умер или что-то в этом роде):

Setting up flashplugin-nonfree (1:3.7)...
ERROR: wget failed to download http_://people.debian.org/~bartm/flashplugin-nonfree/D5C0FC14/fp.26.0.0.151.sha512.amd64.pgp.asc

Вам нужно сделать это вручную для Firefox, возможно, перец работает для пользователей Chrome.
Загрузите последнюю версию подключаемого модуля в формате tar.gz с сайта Adobe .

Примечание. :Если вам это нужно для Firefox, обязательно нажмите «нужно для другого компьютера» и выберите версию npapi.

От имени пользователя root извлеките пакет tar.gz и скопируйте libflashplayer.soв /usr/lib/flashplugin-nonfree. Дайте файлу следующие значения разрешений/владельцев:

chmod 644 /usr/lib/flashplugin-nonfree/libflashplayer.so
chown root:root /usr/lib/flashplugin-nonfree/libflashplayer.so

Убедитесь, что соответствующая /etc/alternativesзапись верна (этого не требуется, если плагин работал правильно до обновления)

update-alternatives --list flash-mozilla.so 

должен вернуть/usr/lib flashplugin-nonfree/libflashplayer.so
Если это не так, вы можете исправить это с помощью:

update-alternatives --quiet --install /usr/lib/mozilla/plugins/flash-mozilla.so flash-mozilla.so /usr/lib/flashplugin-nonfree/libflashplayer.so 50

См. вики Debian для получения дополнительной информации.

1
03.09.2020, 11:49
2 ответа

< используется для перенаправления . Если вам нужно сравнить целые числа:

if [ "$MAX" -gt "$CPU" ]

Но $CPUтакже может быть числом с плавающей запятой, а bash не может напрямую работать с числами с плавающей запятой, поэтому вам придется использоватьbc:

if [ "$(bc -l <<< "${CPU} > ${MAX}")" -eq 1 ]

Вы также должны использовать форму $(..)вместо устаревшей. обратные кавычки , и вы можете назначить CPUтолько один раз в цикле while:

#!/bin/bash

MAX=80

while true
do
    CPU="$(top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}')"

    if [ "$(bc -l <<< "${CPU} > ${MAX}")" -eq 1 ]
    then
        echo "$CPU"  # This is an example
        sleep 10m
    fi
done
3
18.03.2021, 23:07

top(1)не лучший способ решить эту проблему. Это довольно тяжелый измерительный инструмент, сканирующий гораздо больше, чем вам нужно. Кроме того, он ориентирован на мгновенные значения, что здесь неправильно.

Вместо этого следует использовать средние значения загрузки системы , поскольку они вычисляются ядром непрерывно в течение длительных периодов времени. Это означает, что они не требуют дополнительных затрат, поэтому не влияют на ваши измерения, и на них не влияют мгновенные изменения... например, вызов top(1)!

Вот ваш скрипт, переписанный с точки зрения средней нагрузки:

#!/bin/bash
HIGH_LOAD=6      # 80% of an 8-core system; see link above

while true
  do
    CURR_LOAD=$(cut -f2 -d' ' < /proc/loadavg)
    if [ $CURR_LOAD -lt $HIGH_LOAD ]
      then
        run-background-command
      fi
    sleep 10m
  done

Обратите внимание, что вызов sleepперемещается за пределы условия if:, которое вы хотите отложить в любом случае. Возможно, вы захотите вместо этого добавить else, чтобы задержка отличалась для случаев низкой и высокой нагрузки.

Кроме того, в отличие от вашей версии, мы не повторяем проверку использования ЦП внутри цикла и снаружи.

2
18.03.2021, 23:07

Теги

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