Сравнение вывода

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

sedikpoll
Сообщения: 100

Сравнение вывода

Сообщение sedikpoll »

Пытаюсь написать скрипт который будет отсылать сообщение на почтовый ящик если место на носители больше чем нужно.

Код: Выделить всё

df | awk 'NR==2 {print $5}'

Смотрим сколько занято места на нужном нам носители. Получаем 55%, если вывод равен 60% и больше то отсылаем письмо c предупреждением.



Код: Выделить всё

if
df | awk 'NR==2 {print $5}'
тут нужно как то ещё сравнить полученное => 60%, но я не знаю как это можно осуществить.
else
mail -s 'df' me@email.com
fi


Правильно ли я двигаюсь? Подскажите пожалуйста, Спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5505
ОС: Gentoo

Re: Сравнение вывода

Сообщение /dev/random »

Во-первых, я бы не советовал искать нужную строку по номеру. Кто знает, в каком порядке df выведет точки монтирования. То, что сейчас он первой выводит '/', не означает, что он так же будет вести себя всегда.
Во-вторых, для успешного сравнения было бы неплохо убрать знак %. Это проще всего сделать sed'ом. А от awk вообще избавиться, раз уж всё равно sed использоваться будет.

[ "$(df | sed -n 's:.* \([0-9]*\)% /$:\1:p' | head -n 1)" -ge 60 ] && mail -s 'df' me@email.com
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Сравнение вывода

Сообщение SLEDopit »

А еще можно не изобретать велосипеды и поставить нормальную систему мониторинга и включить оповещение по мылу.
Она вам заодно и графики красивые нарисует и не только за местом на диске проследит.
зы. например munin, как одна из наиболее простых в настройке и использовании для небольшого количества серверов. [ пример работы ]
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Сравнение вывода

Сообщение watashiwa_daredeska »

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%

Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сравнение вывода

Сообщение sash-kan »

/dev/random писал(а):
07.12.2010 21:52
я бы не советовал искать нужную строку по номеру

watashiwa_darede... писал(а):
07.12.2010 22:09
Лучше использовать df -P, ибо df может разбивать строку на две, если что-то не влезает.

присоединяясь к процитированному, добавлю, что df-у параметром можно передать интересующее нас устройство или точку его монтирования (или даже путь к файлу/каталог, чтобы df сам вычислил, на каком устройстве файл/каталог находится). к примеру:
$ df -P /
$ df -P /usr
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Сравнение вывода

Сообщение KiWi »

watashiwa_daredeska писал(а):
07.12.2010 22:09
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%


user

df -P | awk '$6 ~ "^/" && strtonum($5) > 10'


Не?
Спасибо сказали: