Назад | Перейти на главную страницу

запускать задание cron, только если загрузка не слишком высокая

Мне нужно синхронизировать две системы, поэтому производители перечисляют новые сущности, которые будут созданы в приложении-потребителе. В нем нет необходимости в реальном времени (в основном для сбора данных, поэтому отставание на несколько часов не является проблемой), но важно, чтобы эта задача не выполнялась, когда сервер уже занят обслуживанием реальных пользователей.

Я попытался запустить службу синхронизации с более низким приоритетом (nice -n19), но для того, что я видел, это все еще может ухудшить производительность, как если бы эта служба синхронизации выполняла большой запрос к базе данных, она все равно увеличивает нагрузку на базу данных процесс и на всей машине

есть ли способ проверить нагрузку и просто выйти, если она слишком высока (скажем, выше 2)?

В идеале иметь какое-то предупреждение, если cron не обрабатывается слишком долго, потому что нагрузка никогда не опускается ниже 2.

Это хороший подход или я создаю больше проблем, которые решаю?

Просто заключите сценарий в условие тестирования. Например:

#!/bin/bash
load=`grep -o "^." /proc/loadavg`
if [ $load -gt 2 ]; then
    exit 1
fi
### Call you script here ###

Вышеупомянутый скрипт проверит среднюю загрузку за 1 минуту и, если она больше 2, завершится. С другой стороны, если средняя нагрузка меньше или равна 2, она продолжится.

Можно написать более сложные тесты, но концепция та же: используйте сценарий / функцию оболочки, а затем вызовите собственный сценарий синхронизации.