Daemon umschreiben (Perl)

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von ushellpr, 28.01.2009.

  1. #1 ushellpr, 28.01.2009
    Zuletzt bearbeitet: 28.01.2009
    ushellpr

    ushellpr Grünschnabel

    Dabei seit:
    17.01.2009
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo Leute,
    ich versuche schon seid einigen Tagen einen Deamon umzuschreiben. Der Deamon hat einige Module, die in Perl geschrieben sind, die ebenfalls immer Laufen. Ich habe einige erfolgreich editieren können, aber die haben gar keinen Effekt gezeigt.

    Der Daemon beaufsichtigt einen Gewissen Prozess und wenn ereignisse eintreten, werden diese in eine MySQL Datenbank eingetragen, quasi als Protokoll mit Details und Informationen. Zusätzlich möchte ich aber, dass ein shell script ausgeführt werden soll, gleich nach dem Eintrag in der Datenbank.

    Ich hatte es bisher so gemacht, dass ich während der Daemon gelaufen ist, die Perl scripte verändert habe und den kompletten Rechner neugestartet. Aber nichts hatte funktioniert, die Datenbank einträge erschienen, aber das Script wurde nicht ausgeführt. Also habe ich die Shellscript anweisung vor der schleife verlegt, die die Datenbank Einträge macht. Diesmal gab es Probleme, das Perl script ist immer im 2-3 Minuten Takt abgestürzt bzw hat sich neu gestartet. Die exec() anweisung liegt aber definitif zusammen in einer Schleife mit der MySQL Datenbank Eintrag Anweisung.

    Was mache ich Falsch?
    Wie muss ich diese Module bearbeiten. Welchen Ansatz schlägt ihr mir vor?

    Danke für Hilfe im Vorraus
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bitmuncher, 28.01.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Was gibt dir ein solches Skript aus?

    Code:
    #!/usr/bin/perl -w
    
    my $out = `deinskript.sh`;
    print $out."\n";
    
    Natürlich den Pfad zu deinem Shell-Skript einsetzen. Und die Backticks beachten. Ich tippe nämlich mal, dass dein Shell-Skript evtl. keinen richtigen Exit-Code zurückgibt o.ä.

    Ansonsten wäre ein Code-Beispiel von dir brauchbar.
     
  4. #3 ushellpr, 28.01.2009
    ushellpr

    ushellpr Grünschnabel

    Dabei seit:
    17.01.2009
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo,
    danke für deine Antwort.

    Es gibt nichts aus, gar nichts, sie wird nichtmal aufgerufen im Perl Script.

    Code würde ich gerne posten, aber ich darf nicht, welche Teile bräuchtest du denn genau, ich kann sie dir beschreiben.

    Die Anweisung für den SQL eintrag ist in einer eval{] schleife drinnen. Dort habe ich auch die exec() anweisung hinkopiert.

    Wieso wird in dem Perl Script die exec() anweisung einfach ignoriert. Wenn ich sie vor dem SQL do Befehl hinfüge, stürzt das Perl Script immer ab. Das ist gar nicht gut.

    Ich denke, es hat irgendetwas zu tun damit, dass ich dieses Perl Script anders editieren muss.

    Grüße
     
  5. #4 bitmuncher, 28.01.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Wenn es nichts ausgibt, muss das ja nicht unbedingt falsch sein, es sei denn, es soll was ausgeben. In dem Fall solltest du einfach mal dein Shell-Skript korrigieren, da das Problem dann nicht bei Perl liegt. Woran machst du fest, dass es nicht ausgeführt wird?
     
  6. #5 ushellpr, 28.01.2009
    ushellpr

    ushellpr Grünschnabel

    Dabei seit:
    17.01.2009
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo,
    das Shell script muss bestimmte Sachen erledigen, die tut es einfach nicht. Nebenbei soll es auch eine LOG Datei erstellen, alle chmods sind hierfür gesetzt und die LOG datei ist immer leer. Zuerst dachte ich, dass dieses evtl. die LOG nicht findet, habe deshalb alle Pfade zu absoluten Pfaden geändert und den quellcode mehrfach überprüft. Nichts geht.

    Wenn ich das shel script so per Hand starte, funktioniert es einwand frei und tut seine Aufgabe. D.h. es muss definitiv an Perl liegen, es will einfach nicht das ding aufrufen.. :(

    im Kopf der PERL datei steht

    use DBI;
    use strict;

    danach kommt eine Konfiguration zum MySQL Server (Name, DB, PW etc.)

    Der Restliche Quelltext besteht aus eine Art Funktionen Sammlung, diese sind in subs eingegliedert (sub main, sub time_stamp, sub schlagmichtot)

    Die DB Einträge werden in einer eval Schleife gemacht, in ihr befindet sich die Anweisung mit Exec. Sollte ich die dort rausnehmen?

    Hoffe diese Informationen können helfen.

    Danke :-)
     
  7. #6 bitmuncher, 28.01.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    eval berechnet in Perl den als Argument angegebenen Ausdruck. Es ist also ziemlich unnötig den Aufruf eines Shell-Skripts in ein eval zu packen. Siehe dazu auch http://perldoc.perl.org/functions/eval.html Du solltest den Aufruf eher nach dem eval-Block/Ausdruck machen.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Gott_in_schwarz, 29.01.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Warum werden die DB Einträge in einem eval-Block (nicht eval-"Schleife") gemacht?
    Dafür gibts normalerweise einen guten Grund. Findest du den heraus weist du, ob du den Scriptaufruf inner- oder außerhalb des evals hinpacken musst.

    BTW, bist du dir sicher, dass du weist, was du da tust?
    Kennst du die Beschreibung von exec? Warum benutzt du nicht system?
    (Bei nem Daemon würde ich erwarten, dass man mit "exec" extrem sparsam sein sollte..)

    Da hilft btw auch kein eval Block: (das Einzige was der abfängt ist afaik "die")
    Code:
    print "before eval\n";
    eval {
        exec 'echo hello from exec';
    };
    print "after eval\n";
    # Ausgabe:
    before eval
    hello from exec

    Dies wage ich zu bezweifeln.
    Nein, ist sie nicht. Siehe oben.

    Nicht wirklich, hättest genausogut sagen können "der Quelltext besteht aus Schriftzeichen des lateinischen Alphabets und arabischen Ziffern". (Informationsdichte oszilliert hier um den Nullpunkt.)

    Pack da mal noch
    Code:
    use warnings;
    use diagnostics;
    dazu. (Direkt nach "use strict" am Besten.)
    "-w" als Interpreter-switch und "use warnings;" im Script sind gleich, bis auf das "-w" Warnungen global (also auch in geladenen Modulen) einschaltet, "use warnings;" jedoch nur für das aktuelle Package. (Afair)
    Bekommst du danach dann Warnungen, gib diese bitte hier im Wortlaut an.

    Die entsprechenden von mir gequoteten Infos kannst du offline mit dem perldoc Programm ("perldoc perldoc") nachlesen. Oder online in html. (siehe bitmunchers link)
     
  10. #8 bitmuncher, 29.01.2009
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Ich würde mal auf eine Art Exception-Handling tippen. Wäre zumindest für mich der Grund, warum ich DB-Anfragen in ein eval packen würde.
     
Thema:

Daemon umschreiben (Perl)

Die Seite wird geladen...

Daemon umschreiben (Perl) - Ähnliche Themen

  1. XenServer 6.5 NFS daemon failed

    XenServer 6.5 NFS daemon failed: Hallo, habe heute auf meinem Lab Server heute XenServer installiert und wollte anschließend eine lokale ISO Repository anlegen. Dazu ist...
  2. NIELD (Network Interface Events Logging Daemon) 0.3.0

    NIELD (Network Interface Events Logging Daemon) 0.3.0: Network Interface Events Logging Daemon is a tool that receives notifications from the kernel through the rtnetlink socket, and generates logs...
  3. Tinc Virtual Private Network Daemon 1.0.19

    Tinc Virtual Private Network Daemon 1.0.19: tinc is a Virtual Private Network (VPN) daemon that uses tunneling and encryption to create a secure private network between multiple hosts on the...
  4. NIELD (Network Interface Events Logging Daemon) 0.23

    NIELD (Network Interface Events Logging Daemon) 0.23: Network Interface Events Logging Daemon is a tool that receives notifications from the kernel through the rtnetlink socket, and generates logs...
  5. Tinc Virtual Private Network Daemon 1.0.17

    Tinc Virtual Private Network Daemon 1.0.17: tinc is a Virtual Private Network (VPN) daemon that uses tunneling and encryption to create a secure private network between multiple hosts on the...