Мне нужно синхронизировать две системы, поэтому производители перечисляют новые сущности, которые будут созданы в приложении-потребителе. В нем нет необходимости в реальном времени (в основном для сбора данных, поэтому отставание на несколько часов не является проблемой), но важно, чтобы эта задача не выполнялась, когда сервер уже занят обслуживанием реальных пользователей.
Я попытался запустить службу синхронизации с более низким приоритетом (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, она продолжится.
Можно написать более сложные тесты, но концепция та же: используйте сценарий / функцию оболочки, а затем вызовите собственный сценарий синхронизации.