Eu tenho o script abaixo e basicamente o que eu quero fazer é conectar-se aos vários servidores. Veja quantos arquivos abertos existem e envie um e-mail se for superior a 50.000. Mas o último servidor que preciso desse cheque é de mais de 400.000. Eu tenho um problema com o OR que não está funcionando.
Se eu executar este script atual como está, recebo o e-mail de alerta, mesmo que nenhum dos limites tenha sido atingido. Por favor, ajude-me com a minha declaração OR.
Minha saída na linha de comando mostra:
Alert Server Issue
AlertError S1:6326 S2:6355 S3:6242 S4:7171 S5:4694 S6:5284 S7:3973 S8:308432
O roteiro:
#!/bin/bash
S1_IP=72.15.97.13
S2_IP=72.15.97.14
S3_IP=72.15.97.15
S4_IP=72.15.97.16
S5_IP=72.15.97.17
S6_IP=72.15.97.18
S7_IP=72.15.97.19
S8_IP=72.15.97.20
RESULT1=$(ssh test@$S1_IP lsof | wc -l)
RESULT2=$(ssh test@$S2_IP lsof | wc -l)
RESULT3=$(ssh test@$S3_IP lsof | wc -l)
RESULT4=$(ssh test@$S4_IP lsof | wc -l)
RESULT5=$(ssh test@$S5_IP lsof | wc -l)
RESULT6=$(ssh test@$S6_IP lsof | wc -l)
RESULT7=$(ssh test@$S7_IP lsof | wc -l)
RESULT8=$(ssh test@$S8_IP lsof | wc -l)
ERROR_COUNT=0
if [[ $RESULT1 || $RESULT2 || $RESULT3 || $RESULT4 || $RESULT5 || $RESULT6 || $RESULT7 -gt 50000 ]] || [[ $RESULT8 -gt 400000 ]]
then
ERRORS[$ERROR_COUNT]="AlertError"
ERROR_COUNT=$(($ERROR_COUNT+1))
fi
if [ $ERROR_COUNT -gt 0 ]
then
[email protected]
SUBJECT="Over 50,000"
BODY='Alert Server Issue'
CNT=0
while [ "$CNT" != "$ERROR_COUNT" ]
do
BODY="$BODY ${ERRORS[$CNT]}
S1:$RESULT1
S2:$RESULT2
S3:$RESULT3
S4:$RESULT4
S5:$RESULT5
S6:$RESULT6
S7:$RESULT7
S8:$RESULT8"
CNT=$(($CNT+1))
done
echo $SUBJECT
echo $BODY
echo $BODY | mail -s "$SUBJECT" -a "From: [email protected]" $EMAIL
else
echo "I can handle it
S1:$RESULT1
S2:$RESULT2
S3:$RESULT3
S4:$RESULT4
S5:$RESULT5
S6:$RESULT6
S7:$RESULT7
S8:$RESULT8"
fi
De info coreutils 'invocação de teste'
portanto, ter o seguinte em seu código é avaliado como true .
Você deseja especificar explicitamente $RESULT1 -gt 50000 para todos os argumentos e não apenas para o último.
Tirando o chapéu para o nkms , sugiro o seguinte:
Repetir
-gt 50000
uma e outra vez é propenso a erros. Mesmo que você acerte uma vez, o que acontece quando alguém chega e tenta adicionar outro resultado? Um loop é mais fácil de manter e dimensionar. E se você for percorrer cada um dos resultados, por que não colocá-los em uma matriz?Se você quiser estender isso para o restante do seu script, também pode colocar seus endereços IP em uma matriz.