Aller au contenu

mdijoux25

Membres
  • Compteur de contenus

    7
  • Inscription

  • Dernière visite

Messages posté(e)s par mdijoux25

  1. le script python permet l'envois d'un XML avec les différentes informations passées en paramètres à un serveur Nagios.

    il s'agit d'une méthode de contrôle passif.

    le problème est bien la, tout se passe correctement en manuel mais pas avec crontab.

    ce script existe aussi en version BASH et en perl cependant je ne sais pas comment les faires fonctionner sur un Nas Synology.

    voici le script python :

    #!/usr/bin/env python
    import optparse, sys, urllib, cgi
    from xml.dom.minidom  import parseString
    class send_nrdp:
        options = [
            optparse.make_option('-u', '--url', action="store",
                dest="url", help="** REQUIRED ** The URL used to access the remote NRDP agent."),
            optparse.make_option('-t', '--token', action="store",
                dest="token", help="** REQUIRED ** The authentication token used to access the remote NRDP agent."),
            optparse.make_option('-H', '--hostname', action="store",
                dest="hostname", help="The name of the host associated with the passive host/service check result."),
            optparse.make_option('-s', '--service', action="store",
                dest="service", help="For service checks, the name of the service associated with the passive check result."),
            optparse.make_option('-S', '--state', action="store",
                dest="state", help="An integer indicating the current state of the host or service."),
            optparse.make_option('-o', '--output', action="store",
                dest="output", help="Text output to be sent as the passive check result.  Newlines should be encoded with encoded newlines (n)."),
            optparse.make_option('-d', '--delim', action="store",
                dest="delim", help="With only the required parameters send_nrdp.py is capable of processing data piped to it either from a file or other process.  By default, we use t as the delimiter however this may be specified with the -d option data should be in the following formats one entry per line."),
            optparse.make_option('-c', '--checktype', action="store",
                dest="checktype", help="1 for passive 0 for active")
        ]
    
        def run(self):
            parser = optparse.OptionParser(option_list=self.options)
            (options, args) = parser.parse_args()
    
            if not options.url:
                parser.error('You must specify a url.')
            if not options.token:
                parser.error('You must specify a token.')
            try:
                self.setup(options, args)
                sys.exit()
            except Exception, e:
                sys.exit(e)
        def getText(self, nodelist):
            rc = []
            for node in nodelist:
                if node.nodeType == node.TEXT_NODE:
                    rc.append(node.data)
            return ''.join(rc)
    
        def post_data(self, url, token, xml):
            params = urllib.urlencode({'token': token.strip(),'cmd': 'submitcheck', 'XMLDATA': xml});
            opener = urllib.FancyURLopener()
            try:
                f = opener.open(url, params)
                result = parseString(f.read())
            except Exception, e:
                print "Cannot connect to url."
                # TODO add directory option
                sys.exit(e)
            if self.getText(result.getElementsByTagName("status")[0].childNodes) == "0":
                sys.exit()
            else:
                print "ERROR - NRDP Returned: "+self.getText(result.getElementsByTagName("message")[0].childNodes)
                sys.exit(1)
    
        def setup(self, options, args):
            if not options.delim:
                options.delim = "t"
            if not options.checktype:
                options.checktype = "1"
            xml="<?xml version='1.0'?>n<checkresults>n";
            
            # it is possible this may not work on windows systems...
            if not sys.stdin.isatty():
                for line in sys.stdin.readlines():
                    parts = line.split(options.delim)
                    if len(parts) == 4:
                        xml += "<checkresult type='service' checktype='"+options.checktype+"'>"
                        xml += "<hostname>"+cgi.escape(parts[0],True)+"</hostname>"
                        xml += "<servicename>"+cgi.escape(parts[1],True)+"</servicename>"
                        xml += "<state>"+parts[2]+"</state>"
                        xml += "<output>"+cgi.escape(parts[3],True)+"</output>"
                        xml += "</checkresult>"
                    if len(parts) == 3:
                        xml += "<checkresult type='host' checktype='"+options.checktype+"'>"
                        xml += "<hostname>"+cgi.escape(parts[0],True)+"</hostname>"
                        xml += "<state>"+parts[1]+"</state>"
                        xml += "<output>"+cgi.escape(parts[2],True)+"</output>"
                        xml += "</checkresult>"
                        
            # TODO add file option
            #elif options.file:
            #    xml += READ THE FILE
            else:        
                if options.hostname and options.state:
                    if options.service:
                        xml += "<checkresult type='service' checktype='"+options.checktype+"'>"
                        xml += "<hostname>"+cgi.escape(options.hostname,True)+"</hostname>"
                        xml += "<servicename>"+cgi.escape(options.service,True)+"</servicename>"
                        xml += "<state>"+options.state+"</state>"
                        xml += "<output>"+cgi.escape(options.output,True)+"</output>"
                        xml += "</checkresult>"
                    else:
                        xml += "<checkresult type='host'  checktype='"+options.checktype+"'>"
                        xml += "<hostname>"+cgi.escape(options.hostname,True)+"</hostname>"
                        xml += "<state>"+options.state+"</state>"
                        xml += "<output>"+cgi.escape(options.output,True)+"</output>"
                        xml += "</checkresult>"
                    xml += "</checkresults>"
                    self.post_data(options.url, options.token, xml)
    if __name__ == "__main__":
        send_nrdp().run()     
    
    
    
    
    
  2. en ajoutant le "Set -x" j'ai le fichier de log que voici :

    + cd /usr/syno/bin/check/
    + HOST=DS1513+
    + /usr/bin/python send_nrdp.py -u http://ipduseerveur/nrdp/ -t token --hostname=DS1513+ --service=Service -S 0 --output=test de syno
    
     

    et voici mon script :

    #!/bin/ash
    set -x
    [ -t 0 ] || exec >/tmp/monjob.log 2>&1
    cd /usr/syno/bin/check/
    HOST="DS1513+"
    /usr/bin/python send_nrdp.py -u http://ipduseerveur/nrdp/ -t token --hostname="$HOST" --service="service" -S 0 --output="test de syno"
     
  3. le problème semble venir de l'appel du script python dans mon script shell.

    lorsque j'exécute les deux scripts séparément dans le crontab tout se passe correctement.

    cependant dans le script shell, le script python ne se lance pas :/

    du coup j'ai apporté des modifications à mon script :

    #!/bin/sh
    echo "debut du script">>/tmp/out.txt 2>&1
    HOST="synology"
    echo "host = $HOST" >>/tmp/out.txt 2>&1
    PATH=/bin:/usr/bin>>/tmp/out.txt 2>&1
    cd /volume1/script/
    python=$(which python)
    senddata=`$python send_nrdp.py -u http://ipduserver/nrdp/ -t token--hostname="$HOST" --service="test" -S 0 --output="test" >>/tmp/out.txt 2>&1
    echo "fin du script"`>>/tmp/out.txt 2>&1
    echo $senddata>>/tmp/out.txt 2>&1
    
  4. Bonjour,

    alors voici mon problème j'ai un script sh qui se lance manuellement sans problème, cependant dès que je le programme dans le crontab ou le planificateur de tâches rien ne se passe.

    j'ai suivi différents sujet et apporté des modifications mais rien n'y fait.

    je souhaite donc savoir quel est la syntaxe pour l'exécution des scripts depuis le planificateur de tâches.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.