Nagios 4: Résoudre l’erreur “Can’t open /etc/rc.d/init.d/functions”

La version 4 de Nagios est enfin sortie et vous avez décidé de l'installer sur votre serveur Debian/Ubuntu. Il y a de forte chance que vous tombiez sur un message d'erreur au lancement du démon Nagios. Nous allons voir dans ce billet comment résoudre ce problème.

Identification du problème

Vous avez le message suivant quand vous lancer Nagios ?

alors ce billet est fait pour vous...

Explication du pourquoi...

Depuis la mise à jour de Nagios vers la version 4.0 (et la version corrective 4.0.1) un bug plutôt gênant peut impacter les machines Debian et Ubuntu. En effet le script de démarrage de Nagios qui se trouve dans le fichier /etc/init.d/nagios fait un appel à un ensemble de fonctions génériques sous /etc/rc.d/init.d/functions. Malheureusement, ce fichier n'existe pas sous ce nom sur les dernières versions de Debian/Ubuntu mais il est disponible sous  /lib/lsb/init-functions.

Comment résoudre le problème étape par étape...

On commence par installer le logiciel daemon qui est utilisé par le script d'installation nouvelle mouture:

Puis on hack le script de démarrage:

Il ne reste plus qu'à redémarrer Nagios:

 ...Ou utiliser un script qui fait tout pour vous

Pour les gros flemmards que vous êtes, j'ai créé un script qui va vérifier que le problème existe sur votre configuration et le corriger pour vous:

Note: J'ai également ajouter l'appel à ce hack dans mes scripts d'installation et de mise à jour automatique de Nagios.

  • admin_it_informatique

    Merci pour votre solution. Mais pour mon cas cela n’est pas fonctionnelle. Je suis sous Debian 6.0.7 (x86). Après avoir fait les manipulations que vous dites de faire, j’essaie de démarrer le service NAGIOS :

    root@nagios:~# service nagios start
    /etc/init.d/nagios: 147: status: not found
    test: 147: false: unexpected operator
    $Starting nagios: Invalid –user argument: ‘d’ (unknown user d)
    usage: daemon [options] [--] [cmd arg...]
    options:

    Merci d’avance.

    • http://blog.nicolargo.com/ Nicolas Hennion

      J’ai ajouté la ligne de commande:

      sed -i ‘s/status /status_of_proc /g’ /etc/init.d/nagios

      qui devrait résoudre le problème sous Debian 6.0.7.

      Tu peux me dire si cela marche ?

      • admin_it_informatique

        Merci de ta réponse. Mais cela ne résout pas le problème. Je récapitule mes opérations :

        1. J’installe le paquet “daemon”
        2. sed -i “s/^. /etc/rc.d/init.d/functions$/. /lib/lsb/init-functions/g” /etc/init.d/nagios
        3. J’ajoute la nouvelle ligne sed que vous m’avez transmise :
        sed -i ‘s/status /status_of_proc /g’ /etc/init.d/nagios

        A présent le message d’erreur :

        root@nagios:~# service nagios start
        is not running … failed!
        test: 147: false: unexpected operator
        $Starting nagios: Invalid –user argument: ‘d’ (unknown user d)
        usage: daemon [options] [--] [cmd arg...]
        options:

        • Antoine G.

          Sous Debian pour moi ça a marché après le script j’ai fait ceci:
          dans le fichier /etc/init.d/nagios, au niveau du start(), une ligne à changer à changer :

          daemon –user=$user $exec -ud $config
          par :
          daemon –user=$user — $exec -d $config

          Après avoir relancé Nagios, normalement tu as un nouveau message d’erreur :

          is not running … failed!
          test: 147: false: unexpected operator
          $Starting nagios:
          touch: impossible de faire un touch « /var/lock/subsys/nagios »: Aucun fichier ou dossier de ce type

          Édite de nouveau /etc/init.d/nagios et remplace :

          lockfile=/var/lock/subsys/$prog
          Par :
          lockfile=/var/lock/$prog

          Ça devrait fonctionner !!

          Merci pour le script en tout cas!

          • http://blog.nicolargo.com/ Nicolas Hennion

            Merci pour les infos de ton commentaire. Je viens de mettre à jour les scripts !

          • admin_it_informatique

            Parfait. C’est à présent fonctionnel. Je vous remercie.

          • tititotoph

            bonjour,

            malgré les modifications j’ai toujours les mêmes problèmes:

            is not running … failed!
            test: 147: false: unexpected operator
            $Starting nagios:

            j’ai vérifier ma config nagios pas de problèmes….. une idée…

          • lucky

            Lucky,

            Distrib ubuntu 12.04.lts / nagios 4.0

            Toute la procédure est ok, sauf qu’il a fallu que je compile les cgis pour mes maps.

            Par contre pour le script d’init, j’ai le même problème d’opérateur ( qui ne semble pas être ==).

            Donc je suis obligé de le relancer deux fois pour lancer mon process.

            Cordialement.

          • Jerome

            Bonjour Lucky,

            Peux tu donner les commandes pour compiler les cgis pour les maps? mes maps ne fonctionne pas. Merci

          • Jérémy Belleau

            Bonjour , j’ai installé lancer le script et j’ai cette érreur :
            erreur 102 syntax error : “}” unexpected (expecting “fi”)

            j’ai exécuter votre script

            cordialement

          • greg

            Bonjour,

            J’ai également la même erreur :
            etc/init.d/nagios: 118: /etc/init.d/nagios: Syntax error: “}” unexpected (expecting “fi”)

            Auriez-vous une idée ?

            Merci.

          • percubabs

            j’étais dans le même cas,j’ai fait les modifs de antoine . ça a fonctionné, mais now j’ai
            /etc/init.d/nagios: 73: test: false: unexpected operator

            une idée ? merci

          • Jerome

            Bonjour, après installation meme erreur que Percubabs. Si je relance la commande /etc/init.d/nagios start ou service nagions start alors le process est running. Si quelqu’un a une idée ?

          • Jonathan Dumont

            Bonjour Nicolas;
            J’ai utilisé ton script sous Debian 7 déployé en minimal; mais j’obtienais tout de même l’erreur runuser: not found.

            En éditant remplaçant runuser par su ; nagios démarre sans problème. ;)

          • http://blog.nicolargo.com/ Nicolas Hennion

            Billet et script modifiés ! Merci pour la relecture :)

  • Guest

    Parfait, c’est à présent fonctionnel. Je vous remercie.

  • Philippe Leroux

    merci pour votre aide j’ai réussi …enfin … à lancer nagios v4

  • Georges Kut

    hello simpas le hack mais … il y a comme un bug des idées ?

    root@Monitor:~# /etc/init.d/nagios stop
    [ ok ] is running.
    $Stopping nagios: Illegal option -d
    /sbin/start-stop-daemon: signal value must be numeric or name of signal (KILL, INT, …)
    Try ‘/sbin/start-stop-daemon –help’ for more information.

    root@Monitor:~# sudo nagios stop
    sudo: nagios: command not found
    root@Monitor:~# sudo service nagios stop
    [ ok ] is running.
    $Stopping nagios: Illegal option -d
    /sbin/start-stop-daemon: signal value must be numeric or name of signal (KILL, INT, …)
    Try ‘/sbin/start-stop-daemon –help’ for more information.

    root@Monitor:~# sudo service nagios restart
    /etc/init.d/nagios: 50: /etc/init.d/nagios: /sbin/service: not found
    root@Monitor:~# sudo service nagios start
    [ ok ] is running.

    • Julien

      Pour ma part, j’ai eu aussi le problème du “/etc/init.d/nagios: /sbin/service: not found”.
      J’utilise Nagios 4 et pour résoudre le problème, j’ai dû copier les fichiers “/ndoutils-2.0.0/src/ndomod-4x.o” et “/ndoutils-2.0.0/src/ndo2db-4x” dans le fichier /usr/local/nagios/bin (renommé respectivement “ndomod.o” et “ndo2db”). C’était mon “/usr/local/nagios/var/nagios.log” qui me disait qu’il n’arrivait pas à lire ces deux fichiers.
      En espérant en aider certains…
      Cordialement !

  • http://blogmotion.fr Mr Xhark

    Sur Ubuntu la commande runuser n’existe pas :

  • amphee

    Bonjour,

    Tout d’abord merci pour ce hack mais j’ai un problème par la suite je ne sais pas si il vient du hack ou autre donc je post ici ^^”

    Alors voila j’essaie d’installer Nagios sur une machine virtuelle Debian 7.2. Tout va bien jusqu’au moment ou j’essaie de me connecter sur mon interface Web.

    Not Found

    The requested URL /nagios/< was not found on this server.

    Apache/2.2.22 (Debian) Server at 192.168.0.9 Port 80

    -J'ai regarder les status de nagios et apache2 et tout les deux sont "running"

    -J'ai regarder les logs d'erreurs et il y a les message suivant :

    [Wed Dec 11 18:25:01 2013] [error] [client ::1] File does not exist: /usr/local/nagios/share/<, referer: http://localhost/nagios/

    J'ai regarde sur le net mais je ne trouve pas vraiment de topic qui parlent de ce problème et mon niveau en anglais n'est pas spectaculaire et je suis "nouveau" dans le monde de linux.

    Merci d'avance :D

  • PixX_L

    Bonjour, J’ai aussi le problème de runuser après avoir installer le patch :
    sudo /etc/init.d/nagios start
    * is not running
    /etc/init.d/nagios: 146: /etc/init.d/nagios: runuser: not found

    Comment puis-je résoudre ce problème ? je suis sur ubuntu 13.10 il me semble que le probème est le même que Mr Xhark

  • Owned67

    Bonjour,

    sed: -e expression n°1, caractère 73: Contenu invalide de {}
    [FAIL] is not running … failed!
    /etc/init.d/nagios: 51: /etc/init.d/nagios: /usr/usr/sbin/service: not found

    avec votre script…

    Cordialement et bonne année

    réglé pour ma pars

  • Maskk

    Salut Nico j’ai suivi ton tuto à la lettre,
    en revanche lorsque j’applique le sed
    sed -i ‘s/##killproc -p ${pidfile} -d 10/killproc -p ${pidfile}/g’ /etc/init.d/nagios

    j’ai une erreur : sed: -e expression #1, char 73: Invalid content of {}
    J’ai executé ton script pour vérifier les éventuelles fautes de frappes mais non … cette ligne coince chez moi .
    Je te précise ma version : debian 6.0.8
    Pourrais tu m’éclairer merci !

    • Maskk

      J’ai fais un petit tour sur le net et voici les commandes qui marchent pour moi :
      # Nicolargo
      sed -i ‘s/^. /etc/rc.d/init.d/functions$/. /lib/lsb/init-functions/g’ /etc/init.d/nagios
      sed -i ‘s/status /status_of_proc /g’ /etc/init.d/nagios
      sed -i ‘s/daemon –user=$user $exec -ud $config/daemon –user=$user — $exec -d $config/g’ /etc/init.d/nagios
      sed -i ‘s//var/lock/subsys/$prog//var/lock/$prog/g’ /etc/init.d/nagios
      sed -i ‘s//sbin/service nagios configtest//usr/sbin/service nagios configtest/g’ /etc/init.d/nagios
      sed -i ‘s/” == “/” = “/g’ /etc/init.d/nagios
      sed -i “s/##killproc -p ${pidfile} -d 10/killproc -p ${pidfile}/g” /etc/init.d/nagios
      sed -i “s/runuser/su/g” /etc/init.d/nagios

      # Ajout !!!

      sed -i “s/use_precached_objects=”false”/&ndaemonpid=$(pidof daemon)/” /etc/init.d/nagios
      sed -i “s/killproc -p ${pidfile} -d 10 $exec//sbin/start-stop-daemon –user=$user $exec –stop/g” /etc/init.d/nagios
      sed -i “s//sbin/start-stop-daemon –user=$user $exec –stop/&ntkill -9 $daemonpid/” /etc/init.d/nagios
      Faites un :
      service nagios reload
      service nagios restart
      Le probleme est il résolu pour vous ?

  • Dude

    Sous Debian Wheezy, le paquet Deamon est introuvable.
    Il faut le télécharger : http://www.libslack.org/daemon/
    Et le compiler.

  • Sébastien Legrand

    moi quand j’utilise le scrip voila le résultat (ps je suis une vrai quiche en prog….

    root@ubuntu:/usr/src/nagios-4.0.3# ./hack4nagiosstart.sh
    Lecture des listes de paquets… Fait

    Construction de l’arbre des dépendances

    Lecture des informations d’état… Fait

    daemon est déjà la plus récente version disponible.

    0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

    /etc/init.d/nagios: 110: /etc/init.d/nagios: Syntax error: “}” unexpected (expecting “fi”)

    root@ubuntu:/usr/src/nagios-4.0.3#

    • Sébastien Legrand

      je continue mes investigations…