Correction regression si tache cron

- Le log était envoyé avant la fin des tests
-  Suppression du "read" à la fin du bloc des echo "xx% restant"
This commit is contained in:
John Doe 2022-04-24 21:57:08 +02:00
parent 818893e7c1
commit d2fd6588eb
1 changed files with 46 additions and 40 deletions

View File

@ -79,39 +79,42 @@ do
/usr/sbin/smartctl -t "$TYPE_TEST" "$i" > /dev/null 2>&1
done
TEMPS_MAX=0 #RAZ du temps de polling
for i in "${ARRAY_TEMPS[@]}" #recherche de la valeur max dans les temps de polling extraits
do
if (("$i" > $TEMPS_MAX))
then TEMPS_MAX="$i"
fi
done
if [ "$RUNNING_FROM_CRON" == "0" ]; then
echo ""
fi
TEMPS_MAX=0 #RAZ du temps de polling
while [ "$FIN_TEST" = "NOK" ] #On boucle tant qu au moins un disque n a pas fini son selftest
do
ECRIRE="FALSE"
FIN_TEST="OK"
TEMPS=($(date +"%T"))
for i in "${ARRAY_TEMPS[@]}" #recherche de la valeur max dans les temps de polling extraits
for i in "${!DISKS[@]}"
do
if (("$i" > $TEMPS_MAX))
then TEMPS_MAX="$i"
MODEL=($(/usr/sbin/smartctl -i ${DISKS[$i]} | grep "Device Model:" | sed "s/Device Model: //g"))
if /usr/sbin/smartctl -c "${DISKS[$i]}" | grep "Self-test routine in progress" > /dev/null 2>&1; then #Si scan non fini
FIN_TEST="NOK" #On repasse la variable FIN_TEST a FALSE
POURCENT_EXT=($(/usr/sbin/smartctl -c "${DISKS[$i]}" | grep "% of test remaining"))
if [ "${POURCENT_RESTANT[$i]}" != "$POURCENT_EXT" ]; then
POURCENT_RESTANT[$i]="$POURCENT_EXT"
AVANCEMENT[$i]="$TEMPS : $POURCENT_RESTANT du selftest restant sur le disque ${MODEL[@]} (${DISKS[$i]})."
ECRIRE="TRUE" #On écrit seulement si changement sur au moins un disque
fi
else
AVANCEMENT[$i]="$TEMPS : selftest terminé sur le disque ${MODEL[@]} (${DISKS[$i]})."
fi
done
while [ "$FIN_TEST" = "NOK" ] #On boucle tant qu au moins un disque n a pas fini son selftest
do
ECRIRE="FALSE"
FIN_TEST="OK"
TEMPS=($(date +"%T"))
for i in "${!DISKS[@]}"
do
MODEL=($(/usr/sbin/smartctl -i ${DISKS[$i]} | grep "Device Model:" | sed "s/Device Model: //g"))
if /usr/sbin/smartctl -c "${DISKS[$i]}" | grep "Self-test routine in progress" > /dev/null 2>&1; then #Si scan non fini
FIN_TEST="NOK" #On repasse la variable FIN_TEST a FALSE
POURCENT_EXT=($(/usr/sbin/smartctl -c "${DISKS[$i]}" | grep "% of test remaining"))
if [ "${POURCENT_RESTANT[$i]}" != "$POURCENT_EXT" ]; then
POURCENT_RESTANT[$i]="$POURCENT_EXT"
AVANCEMENT[$i]="$TEMPS : $POURCENT_RESTANT du selftest restant sur le disque ${MODEL[@]} (${DISKS[$i]})."
ECRIRE="TRUE" #On écrit seulement si changement sur au moins un disque
fi
else
AVANCEMENT[$i]="$TEMPS : selftest terminé sur le disque ${MODEL[@]} (${DISKS[$i]})."
fi
done
if [ "$RUNNING_FROM_CRON" == "0" ]; then
if [ "$ECRIRE" == "TRUE" ];then
echo ""
for i in "${!DISKS[@]}"
@ -119,9 +122,12 @@ if [ "$RUNNING_FROM_CRON" == "0" ]; then
echo "${AVANCEMENT[$i]}"
done
fi
sleep 5s #On attend pour relancer la boucle de test de statut
done
fi
sleep 5s #On attend pour relancer la boucle de test de statut
done
if [ "$RUNNING_FROM_CRON" == "0" ]; then
echo ""
for i in "${!DISKS[@]}" #Une fois qu'on est sur la fin du test pour l'ensemble des disques
do
@ -135,22 +141,22 @@ if [ "$RUNNING_FROM_CRON" == "0" ]; then
echo "**************************************************"
echo ""
echo "Le test de l'ensemble des disques a pris $TEMPS_MAX minutes."
read
fi
date > $LOG #RAZ fichier de sortie + inscription date
for i in "${DISKS[@]}" #Boucle d inscription des résultats dans le fichier de sortie
do
echo "----------------------------------------------------------------" >> $LOG
echo "DISK "$i"" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Model Family" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Device Model" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Serial Number" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Firmware" >> $LOG
echo " " >> $LOG
/usr/sbin/smartctl -H -A -l selftest "$i" >> $LOG
echo " " >> $LOG
echo "----------------------------------------------------------------" >> $LOG
echo "DISK "$i"" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Model Family" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Device Model" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Serial Number" >> $LOG
/usr/sbin/smartctl -i "$i" | grep "Firmware" >> $LOG
echo " " >> $LOG
/usr/sbin/smartctl -H -A -l selftest "$i" >> $LOG
echo " " >> $LOG
done
if [ "$RUNNING_FROM_CRON" == "1" ]; then
cat $LOG | /usr/bin/mailx -s "Sante des disques sur $HOSTNAME" root@$HOSTNAME #envoi de mail
fi
fi