if
df | awk 'NR==2 {print $5}'
тут нужно как то ещё сравнить полученное => 60%, но я не знаю как это можно осуществить.
else
mail -s 'df' me@email.com
fi
Правильно ли я двигаюсь? Подскажите пожалуйста, Спасибо.
Во-первых, я бы не советовал искать нужную строку по номеру. Кто знает, в каком порядке df выведет точки монтирования. То, что сейчас он первой выводит '/', не означает, что он так же будет вести себя всегда.
Во-вторых, для успешного сравнения было бы неплохо убрать знак %. Это проще всего сделать sed'ом. А от awk вообще избавиться, раз уж всё равно sed использоваться будет.
[ "$(df | sed -n 's:.* \([0-9]*\)% /$:\1:p' | head -n 1)" -ge 60 ] && mail -s 'df' me@email.com
А еще можно не изобретать велосипеды и поставить нормальную систему мониторинга и включить оповещение по мылу.
Она вам заодно и графики красивые нарисует и не только за местом на диске проследит.
зы. например munin, как одна из наиболее простых в настройке и использовании для небольшого количества серверов. [ пример работы ]
1. Лучше использовать df -P, ибо df может разбивать строку на две, если что-то не влезает.
2. NR==2 — плохое условие. Лучше ориентироваться на 'Filesystem' или 'Mounted on'.
3. Можно подменить field separator, чтобы он включал знак '%', тогда в $5 останется только число, которое можно сравнивать. Можно воспользоваться функцией strtonum, которая проигнорирует финальный '%'. Т.е. как-то так:
user
$ df -P | awk 'NR==1{next} # Пропускаем первую строку (заголовки)
$6 ~ /\/(b.*)?$/ && # Только разделы, подключенные к / и /b.*
strtonum($5)>20 { # Только разделы, заполненные более, чем на 20%
print $6 " filled with " $5}'
/ filled with 25%
/boot filled with 25%
Лучше использовать df -P, ибо df может разбивать строку на две, если что-то не влезает.
присоединяясь к процитированному, добавлю, что df-у параметром можно передать интересующее нас устройство или точку его монтирования (или даже путь к файлу/каталог, чтобы df сам вычислил, на каком устройстве файл/каталог находится). к примеру:
$ df -P /
$ df -P /usr
1. Лучше использовать df -P, ибо df может разбивать строку на две, если что-то не влезает.
2. NR==2 — плохое условие. Лучше ориентироваться на 'Filesystem' или 'Mounted on'.
3. Можно подменить field separator, чтобы он включал знак '%', тогда в $5 останется только число, которое можно сравнивать. Можно воспользоваться функцией strtonum, которая проигнорирует финальный '%'. Т.е. как-то так:
user
$ df -P | awk 'NR==1{next} # Пропускаем первую строку (заголовки)
$6 ~ /\/(b.*)?$/ && # Только разделы, подключенные к / и /b.*
strtonum($5)>20 { # Только разделы, заполненные более, чем на 20%
print $6 " filled with " $5}'
/ filled with 25%
/boot filled with 25%