Michimu: Im hintergrund ausführen lassen

Hallo,

denke gerade darüber nach, ob es auch möglich ist ein PHP oder auch ein cgi im hintergrund lauffen zu lassen.
Denke mir das so... php oder das cgi wird gestartet, es wird kein fenster aufgemacht, -und läuft so lange bis ich es wieder beende.

Habe versucht da mal was darüber im forum zu lesen, aber bin nicht fündig geworden.
Also daher meine Frage an euch :-) Geht das im Hintergrund lauffen zu lassen? wenn ja, wo könnte ich mich darüber informieren. Und das Starten und beenden ... wie könnte ich das Problem lösen? Wo könnte ich da was lesen... (Java... naja liegt mir nicht gerade besonders :-( leider)...

Schöne Abend euch allen :-)

Michimu

  1. Wie soll das gehen?

    PHP läuft auf dem Server, und der bricht nurmalerweise nach 30 Sekunden (kann verschieden sein) ab, weil er denkt, es sei eine Endlosschleife.

    Das einzige was man dagegen tun kann, ist die Seite neu zu laden.

    1. Hallo,

      Das einzige was man dagegen tun kann, ist die Seite neu zu laden.

      Danke erstmal für deine Antwort...

      Ja... das ganze sollte sich auch nur Serverseitig abspielen.  Anderer Denkansatz... könnte ich die Seite immer wieder laden lassen ausführen, zurück... und wieder von vorne..

      Mein Hauptproblem ist es aber ... mehrere sogenannte "Jobs". Diese wurden in ner DB gespeichert wo drinnen steht... Jobname = das php oder cgi-Programm, Wiederholungen in sec. usw.

      So nun sollte ein datensatz nach dem anderen abgearbeitet werden bzw. das Programm was in diesem Datensatz steht ausgeführt werden.

      Habe folgenden Caode mal versucht, aber...klappt noch ned so ganz ...

      $odbc = odbc_connect ($achost3, $acuser3, $acpwd3) or die( "Could    Not Connect to ODBC Database!" );
      $query = odbc_exec($odbc, "SELECT * FROM $dbname ORDER BY jobname ASC;") or die (odbc_errormsg());
      If ($query == "" OR $query == "0") {
      echo " Es wurden keine Datensätze in der Datenbank " .$dbname. " gefunden!\n";
      }
      else
      {
      echo "<table border="0">\n";
       echo "<td valign="top" class="wws">Lfdnr.</td>
          <td valign="top" class="wws">Jobname<br>Beschreibung</td>
          <td valign="top" class="wws">Status<br>Laufz.</td>
          <td valign="top" class="wws">JobPGM<br>Ersteller</td>
          <td valign="top" class="wws">Geplante Zeit<br>Erstellt am</td>
          <td valign="top" class="wws">START/ENDE  ANZ<br>Bearbeitung</td>";
       while($row = odbc_fetch_row($query))
       {
       echo "<tr>";
       $A0 = odbc_result($query, 1);
       $A1 = odbc_result($query, 2);
        $su = $A0;
        echo "<td valign="top" nowrap align="left" valign="top" class="wws">$A0<br>Job-Nr. $A1</td>\n";
       $A2a = odbc_result($query, 3);
       $A2b = odbc_result($query, 10);
       $A3 = odbc_result($query, 4);
        if($A2b == "HLD") {
        $tf = "#FF0000";
        } else { $tf = ""; }
        echo "<td valign="top" align="left" valign="top" class="wws">$A2a - <font color="$tf">$A2b</font><br>$A3 </td>\n";
       $A4a = odbc_result($query, 5);
       $A4b = odbc_result($query, 7);
        echo "<td valign="top" align="left" valign="top" class="wws">$A4a<br>$A4b </td>\n";
       $A5a = odbc_result($query, 6);
       $A5b = odbc_result($query, 8);
        echo "<td valign="top" align="left" valign="top" class="wws">$A5a<br>$A5b </td>\n";
       $A6a = odbc_result($query, 9);
       $A6b = odbc_result($query, 11);
        echo "<td valign="top" align="left" valign="top" class="wws">$A6b<br>$A6a </td>\n";

      echo "<td valign="top" align="left" valign="top" class="wws">
         <a href="../_Service/Job_startende.php?"
            . "suche=$su " "
               . "target="_self">Start / End</a>    <<<--- ungewiss
         <a href="../_Service/PGM/$A5a?"
            . "suche=$A1 " "
               . "target="_blank">ANZ</a><br>
         <a href="../cgi/Job_bearbeiten_1.php?"
            . "id=$A0 " "
               . "target="_self">bearbeiten</a>  ";
        echo "<a href="../_Service/xxxx.php?"
            . "id=$A0 " "
               . "target="_self">löschen</a><br></td>";
       if($A2b == "HLD") {
        echo "";
        } else {
        echo "<meta http-equiv="refresh" content="$A4b; URL=http://www.test.de/_cgi/PGM/$A5a">";
        }
       echo "</tr>";

      }
      }

      Hast du ne Idee wie mann sowas realisieren könnte ?

      Danke... :-)

      Michimu

      1. Hello,

        als Bestandteil des Apachen läuft eine Instanz des PHP-Interpreters ohnehin schon im Hintergrund. Zumindest habe ich auf meinen Servern keine Konsole dafür.

        Es gibt auch die Möglichkeit der Befehlszeilenausführung von PHP. Ob jetzt ein exec() oder ein system() als Childprozess oder als selbständiger Schwesterprozess gestartet werden, vermag ich nicht zu sagen.

        Wenn es Childprozesse wären würde das unweigerlich irgendwann entweder zum Stackoverflow kommen oder aber der oberste Parent würde nach Ablauf der maximalen Ausführungszeit die gesamten Prozesse beenden.

        Allerdings kann man selbst bei 30sec maximaler Ausführungszeit ein Script verdammt lange leben lassen, da nur die reine Rechenzeit gewertet wird und ein sleep() nicht dazuzählt.

        Du könntet das Script also aller 0,08 sec (das ist so eine typische  Ausführungszeit für "normale" Scripte ohne viele Dateizugriffe) für 1 Minute schlafen schicken.

        Das würde dann schon 375 Minuten Lebensdauer ergeben.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen