Привет.
Есть Ubuntu 22, а на нем лежит лог-файл в директории /var/tmp.
Лог файл имеет свойство разрастаться, а передо мной поставлена задача написания небольшого скрипта, который может рассчитать средне-временное значение прироста объема файла и, зная его, настроить прогнозирование момента, когда файл упрется в диск, чтобы за 2 часа до паники предупредить о необходимости вычистить старые данные в логе.
Признаюсь честно, пытался замерять среднюю скорость роста объема файла (через df в разные промежутки времени), чтобы использовать это значение для выстраивания, но растущие из задницы руки обрушили эту затею.
Если вам не зазорно мне оказать поддержку (а она, скорее всего, потребуется мне буквально в пошаговом формате), то буду очень благодарен.
Ввиду неработоспособности испробованных мною способов логировать их здесь не буду, ожидая чужих идей по реализации решения и дальнейшего здесь логирования своих проблем и прогресса.
Прогнозирование времени заполнения места на диске
Лог файл имеет свойство разрастаться, а передо мной поставлена задача написания небольшого скрипта, который может рассчитать средне-временное значение прироста объема файла и, зная его, настроить прогнозирование момента, когда файл упрется в диск, чтобы за 2 часа до паники предупредить о необходимости вычистить старые данные в логе.
Средне-временное значение прироста - понятие растяжимое. Если за интервал времени взять эти самые 2 часа, тогда как-то так...
#!/bin/bash
echo "Всего доступно на диске (КБ)"
disk_avail=$(df -k / --output=avail | tail -n1| tr -d " ")
echo "$disk_avail"
echo "Текущее использование диска, на котором лежит файл (КБ)"
disk_used=$(df -k / --output=used | tail -n1 | tr -d " ")
echo "$disk_used"
echo "Ждём 2 часа (60x60x2=7200 sec)"
sleep 7200
echo "Узнаём, на сколько уменьшилось используемое пространство диска рез 2 часа (КБ)"
let delta=$(df -k / --output=used | tail -n1 | tr -d " ")-$disk_used
echo "$delta"
echo "Предел доступного размера диска ЗА 2 часа до заполнения"
let disk_alarm=$disk_avail-$delta
echo "$disk_alarm"
#Бесконечный опрос с интервалом 5 минут (5x60=300 sec)
while true; do
#Если текущее использование диска >= пределу доступного размера диска, то...
if [[ $(df -k / --output=used | tail -n1 | tr -d " ") -ge $disk_alarm ]]; then
echo "Здесь команда по очистке файла..."
#Выпрыгиваем наружу, или не выпрыгиваем и продолжаем...
#break;
fi;
sleep 300
done;
exit 0
В Linux есть квоты:
Пример работы с дисковыми квотами в Linux
Дисковые квоты в Linux (disk quota limit linux debian)