Prozesse starten und beenden (keine Anfängerfrage)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prozesse starten und beenden (keine Anfängerfrage)

    Tach zusammen,

    ich zerbreche mir grad einwenig den Kopf an PHP.
    Ich starte über shell_exec einen Prozess und lasse mir die PID zurückgeben. Diese speichere ich zusätzlich in einer mysql Datenbank um den Prozess später wieder zuordnen zu können.
    Da der Prozess aus PHP heraus gestartet wird, läuft der Prozess dann als wwwrun. Ist derzeit auch so gewolt, da der Prozess einen Onlinedienst startet.

    Allerdings habe ich das nicht erklärbare Problem warum ich nur einen Prozess starten kann. Denn sobald ich einen weiteren Dienst/Prozess starten möchte, wird dies zwar getan (ich erhalte auch eine PID zurück), allerdings ist in der nächsten Sekunde der Prozess wieder beendent worden. Beende ich den zuvor gestarten Prozess und versuche es erneut, kann ich diesen dann starten. Allerdings dann nicht mehr den anderen. Es ist also def so, dass nur ein Prozess gestartet werden kann?

    Jemand eine Idee?

    Mein Aufruf sieht (stark vereinfacht) so aus:
    PHP-Code:
    shell_exec("mein_programm meine_parameter > /dev/null & echo $!"); 
    Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

  • #2
    Ist die Anzahl der Prozesse des Benutzers vllt. limitiert?

    Sind es die gleichen Programme, die du startest?
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Hi,

      also von einer Limitierung habe ich bis dato noch ncihts gehört, das wäre mir neu. Aber wäre ein Ansatz. Wie kann ich das für einen Benutzer prüfen? kannst du mir da helfen?

      Was das andere angeht. Ja, es sind die selben Programm. Allerdings mit verschienden Config Dateien. In denen sind Portangaben, etc. hinterlegt. So kann ich den sekben Dienst mit verschienden Config's starten, was aus der Konsole heraus so auch kein Problem ist und funktioniert.
      Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

      Kommentar


      • #4
        Kannst du auf der Konsole auch als wwwrun die Dienste verschieden oft starten? Gibt es evtl. Logdateien, die sagen, wann und warum der Dienst terminiert?
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          shell_ecex() startet eine Shell, führt den übergebenen Befehl in ihr aus und wenn dieser Befehl endet (exit-Signal), beendet shell_exec() auch die Shell und gibt dir die bis dahin erfolgten Ausgaben zurück.

          (Anderenfalls müsstest du ja einen Resource Pointer erhalten, ähnlich wie bei fopen(). Is aber nich ...)

          Keine Ahnung wie dein Programm gestrickt ist. Aber versuchs mal mit nohup!

          Kommentar


          • #6
            Ehrlich gesagt weiss ich garnicht wie ich die Dienste auf der Konsole mit dem User wwwrun starten soll. sudo habe ich nicht installiert.
            Und da wwwrun ein Benutzer ohne shell ist (siehe wwwrun:/bin/false) ist es mir auch nciht Möglich mich als wwwrun anzumelden.

            In der logdatei vom apache steht nichts drin, in der vom system auch nciht. Oder es wird wo hingeschrieben und ich habe diesen Ort noch nicht gefunden :-)
            Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

            Kommentar


            • #7
              Um noch mal das von onemorenerd aufzugreifen. Ich rufe mein Command bereits mit nohup auf :-)
              Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

              Kommentar


              • #8
                http://de2.php.net/pcntl ?

                Kommentar


                • #9
                  Ui, einen solch grossen Aufwand (neu kompilieren von apache/php) wollte ich eigentlich verhindern.

                  Im Grunde scheint es ja generell zu funktionieren. Was ich eben nicht weiss ist, ob es nicht am wwwrun liegt. Ist es möglich mit einem Shell Skript oder der Kommandozeile ein Prozess unter einem anderem Benutzer zu starten? Ohne Verwendung von sudo wenn möglich :-)
                  Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

                  Kommentar


                  • #10
                    Finde doch erstmal heraus, ob du mit shell_exec überhaupt was starten kannst, sprich ob du eine Shell bekommst. Dazu genügt ja ein einfaches shell_exec('touch /tmp/esklappt') und dann nachsehen, ob die Datei erzeugt wurde.

                    Kommentar


                    • #11
                      Das Starten funktioniert ja an und für sich super. Habe ich über das PHP Skript und shell_exec noch keinen Prozess gestartet lässt sich dieser super starten und bleibt es auch. Versuche ich den nächsten zu starten wird dieser gleich beendet. Wurde jedoch auch gestartet und hatte auch eine PID.

                      Also die shell funktioniert. Hat vielleicht einer eine Idee wo eventuell die Logs stehen in der ein Fehler bei dem zweiten Start gelogged würde?
                      Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

                      Kommentar


                      • #12
                        Auf vielen Unixen ist stderr auf tty9, also lies doch da mal mit, während dein Script versucht, die zwei Programme zu starten.
                        Ansonsten bleiben ja nur die Logs des Webservers und die üblichen in /var/log.

                        Kommentar

                        Lädt...
                        X