Systemd support (activé par défaut, rollback sur init.d si pas dispo)

This commit is contained in:
2023-03-20 21:21:56 +01:00
parent d30e277cf7
commit 8262e10542

108
check
View File

@@ -65,30 +65,51 @@ function chercheLanceur()
# On peut définir un tableau supplémentaire dans le fichier de configuration # On peut définir un tableau supplémentaire dans le fichier de configuration
# Si le lanceur n'est pas défini dans le tableau, on renvoie le nom du # Si le lanceur n'est pas défini dans le tableau, on renvoie le nom du
# processus # processus
# Le deuxieme parametre est "start", "stop", "test"
startup=""
if [ $BASH_VERSINFO -ge 4 ]; then if [ $BASH_VERSINFO -ge 4 ]; then
processus=$1 processus=$1
if [ -z ${lanceur["$processus"]} ]; then if [ -z ${lanceur["$processus"]} ]; then
echo "$processus" startup=$processus
else else
echo ${lanceur["$processus"]} startup=${lanceur["$processus"]}
fi fi
else else
# Le Bash 3 ne supporte pas les tableaux associatifs. On retourne aux liens # Le Bash 3 ne supporte pas les tableaux associatifs. On retourne aux liens
# symboliques # symboliques
echo $1 startup=$1
fi
if [ "$2" == "test" ]; then
if [ -f "/lib/systemd/system/$startup.service" ]; then
echo "Lanceur Systemd lib"
elif [ -f "/etc/systemd/system/$startup.service" ]; then
echo "Lanceur Systemd etc"
elif [ -f "/etc/init.d/$startup" ]; then
echo "Lanceur Init"
else
echo ""
fi
else
if [ -f "/lib/systemd/system/$startup.service" ]; then
/bin/systemctl "$2" "$startup.service"
elif [ -f "/etc/systemd/system/$startup.service" ]; then
/bin/systemctl "$2" "$startup.service"
elif [ -f "/etc/init.d/$startup" ]; then
"/etc/init.d/$startup" "$2"
else
checklog "ERREUR : Lanceur $startup introuvable"
fi
fi fi
} }
function testps() function testps()
{ {
lanceur=`chercheLanceur "$1"` lanceur=`chercheLanceur "$1" "test"`
if [ ! -e "/etc/init.d/$lanceur" ]; then if [ "$lanceur" != "" ]; then
checklog "ERREUR : /etc/init.d/$lanceur introuvable (testps)"
else
if [ `ps -edf | grep -v grep | grep "$*" | wc -l` -eq 0 ]; then if [ `ps -edf | grep -v grep | grep "$*" | wc -l` -eq 0 ]; then
checklog "Relance de '$*' par /etc/init.d/$lanceur" checklog "Relance de '$*' par $lanceur"
/etc/init.d/$lanceur stop chercheLanceur $1 stop
/etc/init.d/$lanceur start chercheLanceur $1 start
fi fi
fi fi
} }
@@ -96,14 +117,12 @@ function testps()
function testpsStrict() function testpsStrict()
{ {
# On rend le test plus strict en mettant un slash devant le nom du demon # On rend le test plus strict en mettant un slash devant le nom du demon
lanceur=`chercheLanceur "$1"` lanceur=`chercheLanceur "$1" "test"`
if [ ! -e "/etc/init.d/$lanceur" ]; then if [ "$lanceur" != "" ]; then
checklog "ERREUR : /etc/init.d/$lanceur introuvable (testpsStrict) "
else
if [ `ps -edf | grep -v grep | grep "/$*" | wc -l` -eq 0 ]; then if [ `ps -edf | grep -v grep | grep "/$*" | wc -l` -eq 0 ]; then
checklog "Relance de '$*' par /etc/init.d/$lanceur" checklog "Relance de '$*' par $lanceur"
/etc/init.d/$lanceur stop chercheLanceur $1 stop
/etc/init.d/$lanceur start chercheLanceur $1 start
fi fi
fi fi
} }
@@ -182,18 +201,17 @@ function testPort()
{ {
# Verifie si un port est actif # Verifie si un port est actif
# Attend 3 parametres : l'adresse IP a tester, le port a tester et le # Attend 3 parametres : l'adresse IP a tester, le port a tester et le
# fichier /etc/init.d/XX a relancer # fichier lanceur à utiliser
if [ ! -e "/etc/init.d/$3" ]; then lanceur=`chercheLanceur "$3" "test"`
checklog "ERREUR : /etc/init.d/$3 introuvable (testPort)" if [ "$lanceur" != "" ]; then
else
RESULTAT=`echo "QUIT" | nc -w1 $1 $2 2>&1` RESULTAT=`echo "QUIT" | nc -w1 $1 $2 2>&1`
if [ "$?" != "0" ] || [ "$RESULTAT" == "" ]; then if [ "$?" != "0" ] || [ "$RESULTAT" == "" ]; then
checklog "Relance de $3 car injoignable par reseau" checklog "Relance de $3 car injoignable par reseau"
echo "ALERTE : La machine `hostname` ne peut plus se connecter a " echo "ALERTE : La machine `hostname` ne peut plus se connecter a "
echo "$1 port $2 : $RESULTAT" echo "$1 port $2 : $RESULTAT"
echo "Relance de $3" echo "Relance de $3"
/etc/init.d/$3 stop chercheLanceur $3 stop
/etc/init.d/$3 start chercheLanceur $3 start
fi fi
fi fi
} }
@@ -202,19 +220,18 @@ function testPortNoBann()
{ {
# Verifie si un port est actif # Verifie si un port est actif
# Attend 3 parametres : l'adresse IP a tester, le port a tester et le # Attend 3 parametres : l'adresse IP a tester, le port a tester et le
# fichier /etc/init.d/XX a relancer # fichier lanceur à utiliser
# Le port sera actif même si il ne renvoie aucun caractère # Le port sera actif même si il ne renvoie aucun caractère
if [ ! -e "/etc/init.d/$3" ]; then lanceur=`chercheLanceur "$3" "test"`
checklog "ERREUR : /etc/init.d/$3 introuvable (testPort)" if [ "$lanceur" != "" ]; then
else
RESULTAT=`echo "QUIT" | nc -w1 $1 $2 2>&1` RESULTAT=`echo "QUIT" | nc -w1 $1 $2 2>&1`
if [ "$?" != "0" ]; then if [ "$?" != "0" ]; then
checklog "Relance de $3 car injoignable par reseau" checklog "Relance de $3 car injoignable par reseau"
echo "ALERTE : La machine `hostname` ne peut plus se connecter a " echo "ALERTE : La machine `hostname` ne peut plus se connecter a "
echo "$1 port $2 : $RESULTAT" echo "$1 port $2 : $RESULTAT"
echo "Relance de $3" echo "Relance de $3"
/etc/init.d/$3 stop chercheLanceur $3 stop
/etc/init.d/$3 start chercheLanceur $3 start
fi fi
fi fi
} }
@@ -225,9 +242,8 @@ function testDDClient()
# une ligne 'ddclient - sleeping for'. Si ce n'est pas le cas (test en cours) # une ligne 'ddclient - sleeping for'. Si ce n'est pas le cas (test en cours)
# on attend 15 s et on refait le test. Si le test est toujours negatif on # on attend 15 s et on refait le test. Si le test est toujours negatif on
# relance. # relance.
if [ ! -e "/etc/init.d/ddclient" ]; then lanceur=`chercheLanceur "ddclient" "test"`
checklog "ERREUR : /etc/init.d/ddclient introuvable (testDDClient)" if [ "$lanceur" != "" ]; then
else
LIGNE1=`ps -edf | grep -v grep | egrep "ddclient "` LIGNE1=`ps -edf | grep -v grep | egrep "ddclient "`
LIGNE2=`echo $LIGNE1 | egrep 'ddclient - sleeping for|ddclient - (connecting to|reading from) checkip.dyndns.com port 80'` LIGNE2=`echo $LIGNE1 | egrep 'ddclient - sleeping for|ddclient - (connecting to|reading from) checkip.dyndns.com port 80'`
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
@@ -235,8 +251,8 @@ function testDDClient()
ps -edf >> /var/log/check.log ps -edf >> /var/log/check.log
checklog "ddclient non lance ou pas en mode sleep : relance" checklog "ddclient non lance ou pas en mode sleep : relance"
echo "Relance de ddclient" echo "Relance de ddclient"
/etc/init.d/ddclient stop chercheLanceur ddclient stop
/etc/init.d/ddclient start chercheLanceur ddclient start
fi fi
fi fi
} }
@@ -320,12 +336,13 @@ function testFichierPresent
{ {
# Cette fonction teste si le fichier passé en premier argument est disponible # Cette fonction teste si le fichier passé en premier argument est disponible
# Si ce n'est pas le cas, relance le programme passé en deuxième paramètre # Si ce n'est pas le cas, relance le programme passé en deuxième paramètre
if [ ! -e "/etc/init.d/$2" ]; then lanceur=`chercheLanceur "$2" "test"`
checklog "ERREUR : /etc/init.d/$2 introuvable (testFichierPresent)" if [ "$lanceur" != "" ]; then
elif [ ! -e "$1" ]; then if [ ! -e "$1" ]; then
checklog "ERREUR : Fichier $1 absent : relance $2" checklog "ERREUR : Fichier $1 absent : relance $2"
/etc/init.d/$2 stop chercheLanceur $2 stop
/etc/init.d/$2 start chercheLanceur $2 start
fi
fi fi
} }
@@ -333,13 +350,12 @@ function testFail2BanActive
{ {
## Cette fonction verifie si des chaines f2b- existent bien dans iptables ## Cette fonction verifie si des chaines f2b- existent bien dans iptables
## Si ce n'est pas le cas, essaie de redémarrer fail2ban ## Si ce n'est pas le cas, essaie de redémarrer fail2ban
if [ ! -e "/etc/init.d/fail2ban" ]; then lanceur=`chercheLanceur "fail2ban" "test"`
checklog "ERREUR : /etc/init.d/fail2ban introuvable" if [ "$lanceur" != "" ]; then
else
/sbin/iptables -L -nv |egrep -q "^Chain f(ail)?2b(an)?-" || ( /sbin/iptables -L -nv |egrep -q "^Chain f(ail)?2b(an)?-" || (
checklog "ERREUR : fail2ban absent dans iptables : redémarrage"; checklog "ERREUR : fail2ban absent dans iptables : redémarrage";
/etc/init.d/fail2ban stop ; chercheLanceur fail2ban stop ;
/etc/init.d/fail2ban start ) chercheLanceur fail2ban start )
fi fi
} }
@@ -349,7 +365,7 @@ if [ ! -f "/etc/check.conf" ]; then
fi fi
# Lanceur est le tableau associatif des lanceurs 'processus'=>'lanceur' dans # Lanceur est le tableau associatif des lanceurs 'processus'=>'lanceur' dans
# /etc/init.d # /etc/init.d ou systemd
# On peut définir des lanceurs dans la fonction chercheLanceur, ou dans le # On peut définir des lanceurs dans la fonction chercheLanceur, ou dans le
# fichier de configuration /etc/check.conf. Si on redéfinit un lanceur dans # fichier de configuration /etc/check.conf. Si on redéfinit un lanceur dans
# /etc/check.conf, c'est lui qui est prioritaire par rapport à ceux codés en dur # /etc/check.conf, c'est lui qui est prioritaire par rapport à ceux codés en dur