Bonjour à toutes et à tous,
Ma cheffe souhaite que l’on reçoive un mail quand un service passe en état failed sur nos serveurs linux.
Depuis ce matin je me documente et j’apprends à faire du script sous linux donc svp soyez indulgent sur ce que vous allez voir ci-dessous
Mon script est terminé et il fait ce que je souhaite c’est à dire :
- vérifier si des services sont en état failed
- relancer le service en question
- envoyer un mail sur une liste pour qu’on soit prévenu
Dans le mail en question, j’inclus le status du service. Pour simuler un service en failed, j’ai modifié le fichier conf du service clamav-freshclam.
Quand je fais manuellement un systemctl status clamav-freshclam.service
j’obtiens ca :
root@xxxx:~# systemctl status clamav-freshclam.service
● clamav-freshclam.service - ClamAV virus database updater
Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2021-03-29 16:09:46 CEST; 21min ago
Docs: man:freshclam(1)
man:freshclam.conf(5)
[url]https://www.clamav.net/documents[/url]
Process: 12921 ExecStart=/usr/bin/freshclam -d --foreground=true (code=exited, status=2)
Main PID: 12921 (code=exited, status=2)
mars 29 16:09:46 xxxx systemd[1]: Started ClamAV virus database updater.
mars 29 16:09:46 xxxx freshclam[12921]: ERROR: Missing argument for option at /etc/clamav/freshclam.conf:3
mars 29 16:09:46 xxxx freshclam[12921]: ERROR: Can't open/parse the config file /etc/clamav/freshclam.conf
mars 29 16:09:46 xxxx systemd[1]: clamav-freshclam.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
mars 29 16:09:46 xxxx systemd[1]: clamav-freshclam.service: Failed with result 'exit-code'.
root@glpi:~#
Jusqu’ici, c’est normal. Mais quand je lance mon script, dans le mail que je reçois j’ai ca :
● clamav-freshclam.service - ClamAV virus database updater
Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-03-29 15:59:07 CEST; 6ms ago
Docs: man:freshclam(1)
man:freshclam.conf(5)
[url]https://www.clamav.net/documents[/url] Main PID: 12798 (freshclam)
Tasks: 1 (limit: 4700)
Memory: 936.0K
CGroup: /system.slice/clamav-freshclam.service
└─12798 /usr/bin/freshclam -d --foreground=true
Ce qui est tout bonnement impossible car le fichier conf du service a toujours ses paramètres erronés
Donc ma question est : ou est ce que je me suis trompé dans le script ? Est ce que l’un de vous peut m’éclairer svp ?
#!/bin/bash
touch /tmp/verif_services /tmp/services_failed /tmp/mail
cd /tmp
VERIF="/tmp/verif_services";
FAILED="/tmp/services_failed";
MAIL="/tmp/mail";
HOSTNAME=$(hostname)
systemctl --type=service | grep failed > $VERIF
if [ -s $VERIF ]
then
cut -d " " -f2 $VERIF > $FAILED
fi
echo "ATTENTION SERVICE(S) EN ETAT FAILED" >> "$MAIL";
echo " " >> "$MAIL";
echo " " >> "$MAIL";
echo "LE(S) SERVICE(S) SUIVANT(S) EST(SONT) EN ETAT FAILED SUR LE SERVEUR" $HOSTNAME >> "$MAIL";
echo " " >> "$MAIL";
cat $FAILED >> "$MAIL";
echo " " >> "$MAIL";
echo "TENTATIVE DE RELANCE AUTOMATIQUE DU(DES) SERVICES" >> "$MAIL";
echo " " >> "$MAIL";
echo " " >> "$MAIL";
for service in $(cat $FAILED)
do
systemctl restart $service;
echo "LE SERVICE" $service "A ETE RELANCE" >> "$MAIL";
echo " " >> "$MAIL";
echo " " >> "$MAIL";
echo "VERIFIEZ L'ETAT DU SERVICE CI-DESSOUS" >> "$MAIL";
echo " " >> "$MAIL";
echo " " >> "$MAIL";
systemctl status $service >> "$MAIL";
echo " " >> "$MAIL";
echo " " >> "$MAIL";
echo "SI TOUJOURS EN FAILED, IL FAUT INTERVENIR SUR LE SERVEUR " >> "$MAIL";
done
cat $MAIL | msmtp prenom.nom@monentreprise.fr;
rm $VERIF $FAILED $MAIL
Je dois faire une modification de la partie « envoi d’email » car je viens de percuter qu’il va m’envoyer un mail à chaque vérification (il sera programmé via cron).
Merci de m’avoir lu