Как я уже писал ранее, мне нужно было следить за RAID, при этом не тратить на это кучу времени.
Я решил, что если CLI утилиты статусы как массивов целиком, так и дисков по отдельности выдают, остается только погрепать результат на значения ошибок. Но как быть если не знаешь как будет описана ошибка?
И я решил мониторить изменения того самого статуса целиком, то есть если в нем изменится хотя бы один символ, я получу сигнал.
root@pve02:~# cat ./CheckArray.sh
#!/bin/bash
ServerName="pve02"
OutputToCheck="/usr/sbin/arcconf GETCONFIG 1 LD"
StateToContol="/root/ArrayState.txt"
TLGGROUP="Admins_message"
if [[ 'init' = $1 ]]
then
eval "$OutputToCheck > $StateToContol"
MESSAGE="RAID monitoring activated | $ServerName "
EXECCMD="\"msg ${TLGGROUP} \"\"${MESSAGE}\""
eval /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub -U root --disable-output --wait-dialog-list --exec "${EXECCMD}"
exit
fi
if [[ $(stat $StateToContol -c %s) = 0 ]]
then
echo "Run script with 'init' key first"
MESSAGE="Run script with 'init' key first | $ServerName"
EXECCMD="\"msg ${TLGGROUP} \"\"${MESSAGE}\""
eval /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub -U root --disable-output --wait-dialog-list --exec "${EXECCMD}"
exit
fi
CurrentState="$(eval $OutputToCheck)"
InitState="$(cat $StateToContol)"
if [[ "$CurrentState" == "$InitState" ]]
then
if [[ 'test' = $1 ]]
then
MESSAGE="Fine, current state equal init value | $ServerName"
EXECCMD="\"msg ${TLGGROUP} \"\"${MESSAGE}\""
eval /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub -U root --disable-output --wait-dialog-list --exec "${EXECCMD}"
exit
fi
else
MESSAGE="Error, current state not equal init value | $ServerName"
EXECCMD="\"msg ${TLGGROUP} \"\"${MESSAGE}\""
eval /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub -U root --disable-output --wait-dialog-list --exec "${EXECCMD}"
exit
fi
Да, да, все от рута, но зачем мне на этой системе еще пользователи?
Ну и расписание запуска:
firoot@pve02:~# crontab -l
# m h dom mon dow command
*/3 * * * * /root/CheckArray.sh
0 16 * * * /root/CheckArray.sh test