Ошибка заключается в том, что вы пытаетесь выбрать поля, например,
CRITICAL_LIMIT=`awk {'print $2'}`
без ввода awk
; очевидно, вы хотели echo $ line |
или (в ksh bash zsh) <<< $ line
, и ваш синтаксис if неверен: вам нужно ((
) )
для арифметического сравнения и кое-что еще для сравнения строк и elif
вместо elseif
. Другие вещи более неуклюжие, чем необходимо:
вы изначально исключаете только те файловые системы, строка монтирования которых включает root
. Я хотел бы отслеживать использование пространства в корневой файловой системе. Однако практически все системы сегодня имеют несколько файловых систем, которые не хранятся и поэтому не имеют места для мониторинга: / proc
и / sys
обычно, / dev
или его часть часто, иногда другие. Если вы запустите df
без указания файловой системы, он сделает все значимые файловые системы за вас. Более того, вы заботитесь только о файловых системах, которые находятся в файле конфигурации, так что просто делайте это.
вы читаете
каждую строку и (пытаетесь) неуклюже разбивать ее с помощью awk
, когда читать
можете сделать это бесплатно
вы (попробуйте) проверять, только если использование равно пороговому значению; если например'/ dev / sda5' быстро меняется с 79% до 81%, ваша логика не выдаст предупреждение для 80%. Обычно люди хотят получать предупреждения, когда использование достигает или выше порогового значения.
{
и }
в скрипте awk
следует заключать в кавычки, потому что фигурные скобки являются специальными символами оболочки (по крайней мере, для большинства командных интерпретаторов) и могут дают непредвиденные и нежелательные результаты, хотя и не в ваших конкретных случаях
. И вы вообще не пытались отправить что-либо по почте, но это часто зависит от системы и среды, поэтому я оставлю это вам.
Применяя все то, что я сделал бы:
#!/bin/ksh
CONFIG_FILE=/home/oracle/files/template
<$CONFIG_FILE while read filesys warn crit; do
used=$( df -Ph "$filesys" | awk 'NR>1 {sub(/%/,"",$5);print $5}' )
if (($used >= $crit)); then echo critical $used% on $filesys
elif (($used >= $warn)); then echo warning $used% on $filesys; fi
done
В качестве альтернативы вы можете оставить %
в поле 5 и использовать и проводить сравнения с усеченным значением $ {used% \%}
; это шесть против полдюжины.
echo 'deb http://httpredir.debian.org/debian/ stretch main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch main contrib non-free
deb http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
deb http://httpredir.debian.org/debian/ stretch-proposed-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch-proposed-updates main contrib non-free
deb http://security.debian.org/ stretch/updates main contrib non-free
deb-src http://security.debian.org/ stretch/updates main contrib non-free' > /etc/apt/sources.list.d/stretch.list
Обновите репозитории apt, чтобы использовать stretch вместо jessie (это можно сделать вручную с помощью текстового редактора, но sed можно использовать для автоматического обновления файла).
[user@debian-9 ~]$ sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list
Обратите внимание на : Debian 9 (Stretch) помечено как тестирование по какой-то причине. Вы можете заметить проблемы со стабильностью при его использовании.
В следующем посте представлены точные шаги, которые необходимо предпринять для обновления Debian 8 Jessie до Debian 9 Stretch:
https://economictheoryblog.com/2018/08/23/upgrade-debian-8-to-9/