Perlscripts funktioniert nur bei Fehler!
Ergebnis 1 bis 8 von 8

Thema: Perlscripts funktioniert nur bei Fehler!

  1. #1
    Jungspund
    Registriert seit
    17.01.2008
    Beiträge
    16

    Perlscripts funktioniert nur bei Fehler!

    Hallo, ich habe hier so ein ungewöhnliches Problem, dass mir noch nicht einmal ein sinnvoller Titel einfällt.

    Also folgendes, ein Perl Script das per Apache2 über die CGI-Schnittstelle ausgeführt wird. In dem Script wird ein Shellprogramm ausgeführt was laufen bleiben soll (also als daemon). Das eigentliche Perl Script soll (muss) aber beendet werden, damit der Webbrowser die Rückgabe bearbeitet.
    So ungefair:
    Code:
    system("daemon_programm.sh &");
    print "alert('Programm gestartet!');";
    Wenn ich es so mache wird der Perlprozess nicht beendet, und der Browser interpretiert nicht die Rückgabe, bis ich den daemon per hand beende und das Perlscript nicht mehr im Speicher ist.
    Code:
     6624 ?        Z      0:00 [script.pl] <defunct>
    Ich habe schon fork() probiert system("nohup programm &"); aber nichts klappt, außer:
    Code:
    system("daemon_programm.sh | dashierverstehichnicht &");
    Wenn ich den Daemon an etwas was einen Fehler zurück gibt "peipe", wird das Perlscript nach der letzten Zeile beendet und der Browser interpretiert die Rückgabe.

    Kann mir das einer erklären, und sagen wie ich es eigentlich richtig machen muss!




  2. Inside Anonymous - Lesetipp zum Sonderpreis


     Inside Anonymous erzählt erstmalig die Geschichte dreier Mitglieder des harten Kerns:
    ihren Werdegang und ihre ganz persönliche Motivation, die sie zu überzeugten Hackern machte.
    Basierend auf vielen exklusiven Interviews bietet das Buch einen einzigartigen und spannenden
    Einblick in die Köpfe, die hinter der virtuellen Community stehen.
    Das Buch kostet bei terrashop.de jetzt statt 22,00 EUR nur noch 4,99 EUR.




    Jetzt bei terrashop.de anschauen – Nur solange der Vorrat reicht


  3. #2
    yet another idiot
    Registriert seit
    22.01.2007
    Beiträge
    166
    Code:
    exec `nohup ./daemon.sh > daemon.out 2>&1 &`
    auf die richtigen 'Backticks' achten (der Schwabe sagt auch Backslashle dazu )
    127.0.0.1:~ sweet 127.0.0.1:~

  4. #3
    Jungspund
    Registriert seit
    17.01.2008
    Beiträge
    16

    Danke!

    Das hat doch tatsächlich funktioniert, wenn ich statt normalen " ein ` nehme.
    Code:
    exec `nohup $command >/dev/null 2>&1 &`;
    Kannst du mir das noch erklären! "exec" beendet doch normalerweise das programm.

  5. #4
    Haudegen Avatar von nighT
    Registriert seit
    13.05.2008
    Ort
    Ichenheim, Germany
    Beiträge
    565
    exec wird in diesem Fall wohl eher für "execute" (Sprich: ausführen) stehen.
    Linux - Für das Leben nach dem Absturz!

  6. #5
    yet another idiot
    Registriert seit
    22.01.2007
    Beiträge
    166
    Hi,
    also da habe ich doch in der Hektik ziemlichen Blödsinn gepostet. Das hätte ich spätestens bei der Erläuterung gemerkt
    Folgende drei Varianten sollten funktionieren:
    Code:
    exec ('nohup ./test.sh >test.log 2>&1 &')
    system ('nohup ./test.sh >test.log 2>&1 &')
    `nohup ./test.sh >test.log 2>&1 &`
    die erste Variante (exec) wird nicht empfohlen, kannste ja mal nach googeln. die 2.Variante (system) ist auch Käse, da du ja den Rückgabewert des daemons gar nicht haben willst (und auch nicht bekommst). Ist ja in diesem Fall auch immer 0, falls der Daemon erfolgreich ausgeführt werden kann. Die backticks (Variante 3) reichen völlig aus.
    Der Gag ist nur, dass der Daemon dein Terminal blockiert, wenn er keine eigene stdin und sterr hat, deshalb leitet man stdin mit ">test.log" in eine Datei um und stderr mit "2>&1" ebenfalls, dann geht der Daemon mit "&" in den Hintergrund. Das nohup vorneweg bewirkt, dass der Daemon auch dann weiterläuft, wenn der user sich vom System abmeldet.
    127.0.0.1:~ sweet 127.0.0.1:~

  7. #6
    yet another idiot
    Registriert seit
    22.01.2007
    Beiträge
    166
    Nochmal zu den Shell Umleitungen:
    jede Shell macht standardmäßig 3 Datei Descriptoren auf:
    0 stdin (Standardeingabekanal)
    1 stdout (Standardausgabekanal)
    2 stderr /Standardfehlerausgabekanal)
    mit >test.log oder 1>test.log leitest du die Ausgabe in eine Datei um
    mit 2>&1 leitest du Kanal 2 auf Kanal 1 um, also auch in die Datei
    mit 2>test.err könntest du die Fehlermeldungen auch in eine separate Datei umleiten
    mit 1>/dev/null 2>&1 schickst du beides ins Nirvana.
    Google mal nach Shell Umleitungen, da gibt es recht ausführliche Beschreibungen.
    Bye,
    yai.
    127.0.0.1:~ sweet 127.0.0.1:~

  8. #7
    Jungspund
    Registriert seit
    17.01.2008
    Beiträge
    16
    Also erst mal danke.
    Macht es probleme wenn man die daemons nicht umleitet? nohub erstellt doch automatisch logs wenn nicht umgeleitet wird. Oder?

    Aber das wirds gewesen sein das ich nicht umgeleitet habe... Komisch.

    BTW:
    Das es mit exec wie oben funktioniert liegt wohl daran das erst die backticks interpretiert werden und die zurückgegebene 0 von exec als parameter angenommen wird. Also "exec 0" wird wohl nichts tun also kann exec auch weg bleiben. Wie du bereits erwähnt hast.
    Geändert von Phill (17.05.2011 um 23:29 Uhr)

  9. #8
    Jungspund
    Registriert seit
    17.01.2008
    Beiträge
    16
    So ich habe es jetzt nochmal getestet.
    system("nohub befehl >/dev/null 2>&1 &"); geht
    system("nohub befehl &"); geht nicht
    besser gesagt geht, aber der hauptprozess wird blockiert.



    das selbe mit backticks.
    exec fällt weg da der hauptprozess ja leben bleiben soll.

Ähnliche Themen

  1. Fehler im Yast? Fehler in SuSE?
    Von Yomm im Forum SuSE / OpenSuSE
    Antworten: 11
    Letzter Beitrag: 19.04.2010, 14:21
  2. apt-get fehler über fehler!
    Von p0lyt0x im Forum Debian/Ubuntu/Knoppix
    Antworten: 23
    Letzter Beitrag: 28.06.2007, 16:58
  3. Nach Neustarten eines Perlscripts
    Von Flo_007 im Forum Debian/Ubuntu/Knoppix
    Antworten: 2
    Letzter Beitrag: 30.03.2007, 12:46
  4. > Operator funktioniert nicht richtig (cdrecord fehler?)
    Von chipotle im Forum SuSE / OpenSuSE
    Antworten: 3
    Letzter Beitrag: 03.03.2007, 12:42
  5. Antworten: 1
    Letzter Beitrag: 02.07.2004, 16:47

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •