From 8262e1054255a42f1531f865bec2f16c1bb45224 Mon Sep 17 00:00:00 2001 From: Dominique FOURNIER Date: Mon, 20 Mar 2023 21:21:56 +0100 Subject: [PATCH] =?UTF-8?q?Systemd=20support=20(activ=C3=A9=20par=20d?= =?UTF-8?q?=C3=A9faut,=20rollback=20sur=20init.d=20si=20pas=20dispo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check | 112 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 64 insertions(+), 48 deletions(-) diff --git a/check b/check index 31c14bd..d47495a 100755 --- a/check +++ b/check @@ -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