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

112
check
View File

@@ -65,30 +65,51 @@ function chercheLanceur()
# 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
# processus
# Le deuxieme parametre est "start", "stop", "test"
startup=""
if [ $BASH_VERSINFO -ge 4 ]; then
processus=$1
if [ -z ${lanceur["$processus"]} ]; then
echo "$processus"
startup=$processus
else
echo ${lanceur["$processus"]}
startup=${lanceur["$processus"]}
fi
else
# Le Bash 3 ne supporte pas les tableaux associatifs. On retourne aux liens
# 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
}
function testps()
{
lanceur=`chercheLanceur "$1"`
if [ ! -e "/etc/init.d/$lanceur" ]; then
checklog "ERREUR : /etc/init.d/$lanceur introuvable (testps)"
else
lanceur=`chercheLanceur "$1" "test"`
if [ "$lanceur" != "" ]; then
if [ `ps -edf | grep -v grep | grep "$*" | wc -l` -eq 0 ]; then
checklog "Relance de '$*' par /etc/init.d/$lanceur"
/etc/init.d/$lanceur stop
/etc/init.d/$lanceur start
checklog "Relance de '$*' par $lanceur"
chercheLanceur $1 stop
chercheLanceur $1 start
fi
fi
}
@@ -96,14 +117,12 @@ function testps()
function testpsStrict()
{
# On rend le test plus strict en mettant un slash devant le nom du demon
lanceur=`chercheLanceur "$1"`
if [ ! -e "/etc/init.d/$lanceur" ]; then
checklog "ERREUR : /etc/init.d/$lanceur introuvable (testpsStrict) "
else
lanceur=`chercheLanceur "$1" "test"`
if [ "$lanceur" != "" ]; then
if [ `ps -edf | grep -v grep | grep "/$*" | wc -l` -eq 0 ]; then
checklog "Relance de '$*' par /etc/init.d/$lanceur"
/etc/init.d/$lanceur stop
/etc/init.d/$lanceur start
checklog "Relance de '$*' par $lanceur"
chercheLanceur $1 stop
chercheLanceur $1 start
fi
fi
}
@@ -181,19 +200,18 @@ function testdf()
function testPort()
{
# Verifie si un port est actif
# Attend 3 parametres : l'adresse IP a tester, le port a tester et le
# fichier /etc/init.d/XX a relancer
if [ ! -e "/etc/init.d/$3" ]; then
checklog "ERREUR : /etc/init.d/$3 introuvable (testPort)"
else
# Attend 3 parametres : l'adresse IP a tester, le port a tester et le
# fichier lanceur à utiliser
lanceur=`chercheLanceur "$3" "test"`
if [ "$lanceur" != "" ]; then
RESULTAT=`echo "QUIT" | nc -w1 $1 $2 2>&1`
if [ "$?" != "0" ] || [ "$RESULTAT" == "" ]; then
checklog "Relance de $3 car injoignable par reseau"
echo "ALERTE : La machine `hostname` ne peut plus se connecter a "
echo "$1 port $2 : $RESULTAT"
echo "Relance de $3"
/etc/init.d/$3 stop
/etc/init.d/$3 start
chercheLanceur $3 stop
chercheLanceur $3 start
fi
fi
}
@@ -202,19 +220,18 @@ function testPortNoBann()
{
# Verifie si un port est actif
# 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
if [ ! -e "/etc/init.d/$3" ]; then
checklog "ERREUR : /etc/init.d/$3 introuvable (testPort)"
else
lanceur=`chercheLanceur "$3" "test"`
if [ "$lanceur" != "" ]; then
RESULTAT=`echo "QUIT" | nc -w1 $1 $2 2>&1`
if [ "$?" != "0" ]; then
checklog "Relance de $3 car injoignable par reseau"
echo "ALERTE : La machine `hostname` ne peut plus se connecter a "
echo "$1 port $2 : $RESULTAT"
echo "Relance de $3"
/etc/init.d/$3 stop
/etc/init.d/$3 start
chercheLanceur $3 stop
chercheLanceur $3 start
fi
fi
}
@@ -225,9 +242,8 @@ function testDDClient()
# 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
# relance.
if [ ! -e "/etc/init.d/ddclient" ]; then
checklog "ERREUR : /etc/init.d/ddclient introuvable (testDDClient)"
else
lanceur=`chercheLanceur "ddclient" "test"`
if [ "$lanceur" != "" ]; then
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'`
if [ $? -ne 0 ]; then
@@ -235,8 +251,8 @@ function testDDClient()
ps -edf >> /var/log/check.log
checklog "ddclient non lance ou pas en mode sleep : relance"
echo "Relance de ddclient"
/etc/init.d/ddclient stop
/etc/init.d/ddclient start
chercheLanceur ddclient stop
chercheLanceur ddclient start
fi
fi
}
@@ -320,12 +336,13 @@ function testFichierPresent
{
# 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
if [ ! -e "/etc/init.d/$2" ]; then
checklog "ERREUR : /etc/init.d/$2 introuvable (testFichierPresent)"
elif [ ! -e "$1" ]; then
checklog "ERREUR : Fichier $1 absent : relance $2"
/etc/init.d/$2 stop
/etc/init.d/$2 start
lanceur=`chercheLanceur "$2" "test"`
if [ "$lanceur" != "" ]; then
if [ ! -e "$1" ]; then
checklog "ERREUR : Fichier $1 absent : relance $2"
chercheLanceur $2 stop
chercheLanceur $2 start
fi
fi
}
@@ -333,13 +350,12 @@ function testFail2BanActive
{
## Cette fonction verifie si des chaines f2b- existent bien dans iptables
## Si ce n'est pas le cas, essaie de redémarrer fail2ban
if [ ! -e "/etc/init.d/fail2ban" ]; then
checklog "ERREUR : /etc/init.d/fail2ban introuvable"
else
lanceur=`chercheLanceur "fail2ban" "test"`
if [ "$lanceur" != "" ]; then
/sbin/iptables -L -nv |egrep -q "^Chain f(ail)?2b(an)?-" || (
checklog "ERREUR : fail2ban absent dans iptables : redémarrage";
/etc/init.d/fail2ban stop ;
/etc/init.d/fail2ban start )
chercheLanceur fail2ban stop ;
chercheLanceur fail2ban start )
fi
}
@@ -348,8 +364,8 @@ if [ ! -f "/etc/check.conf" ]; then
exit
fi
# Lanceur est le tableau associatif des lanceurs 'processus'=>'lanceur' dans
# /etc/init.d
# Lanceur est le tableau associatif des lanceurs 'processus'=>'lanceur' dans
# /etc/init.d ou systemd
# 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
# /etc/check.conf, c'est lui qui est prioritaire par rapport à ceux codés en dur