php script nicht terminieren wenn der browser aus ist?



  • mit welchen einstellungen ist es möglich? ich muss ja das script starten welches die suchtabelle neu füllt und das dauert so 48 stunden,
    ich habe aber höstens 24h anbindung und ab und zu wird schon der browser aus versehen zu gemacht
    selbst wenn ich protokoliere bei welchen topic das script grade ist kann mir niemad garantieren ob es das posting schon durch hatte

    also zu zeit sieht es so aus das das script sich nach 200 posting neu startet mit anderen paramter über dies meta http-equiv="refresh", so wird es am leben erhalten

    ich dachte dran eine for zu machen die einmal gestartet alles durch arbeitet und ab und zu eine datei schreibt damit ich weiss ob es noch leuft, aber welche einstellungen muss ich da machen?



  • entweder über nen cronjob oder ansonsten eben mit ignore_user_abort und set_time_limit dafür sorgen, dass das Script nie endet (siehe auch: Connection-Handling)
    Aber bei einer so langen Laufzeit ist es sicher sinnvoll einen Mechanismus einzubauen, um die Indizierung auch nach einem Abbruch fortsetzen zu können. Wie du das am Besten realisierst, hängt natürlich auch etwas von deiner DB-Struktur ab 😉 - also wie die Such-Index-Tabelle aussieht 🤡


  • Mod

    Theoretisch sollte es mit
    ignore_user_abort
    abzustellen gehen.

    Allerdings würde ich dazu raten, das script direkt auf dem server auszuführen und nicht über ein HTTP Request. Marc++us hat doch sicher Shell Zugriff, oder?

    Denn dann bist du auf der sicheren Seite, denn bei so langen scripten muss man höllisch aufpassen, dass es nicht irgendwo noch eine Sicherung im Apachen gibt...



  • ja marcus hatt soweit ich weiß shell zugriff, geht das denn so leicht, das script auf den server starten?

    flenders schrieb:

    Aber bei einer so langen Laufzeit ist es sicher sinnvoll einen Mechanismus einzubauen, um die Indizierung auch nach einem Abbruch fortsetzen zu können.

    ja das denke ich auch


  • Mod

    Gerard schrieb:

    ja marcus hatt soweit ich weiß shell zugriff, geht das denn so leicht, das script auf den server starten?

    ja.
    einfach

    php scriptname.php

    sofern du keine $_REQUEST variablen verwendest.



  • gehe ich recht in der annahme das die ausgaben dann auf die konsole ausgegeben werden?
    und wie leuft das mit den shell zugang ab? kann er das script starten, sich dann auslogen und später einlogen um zu sehen was das programm inzwischen für ausgaben gemacht hatt?


  • Mod

    Gerard schrieb:

    gehe ich recht in der annahme das die ausgaben dann auf die konsole ausgegeben werden?

    exakt, aber du kannst ja die ausgabe in eine datei leiten lassen.
    nur leider weiss ich die syntax dafuer nicht - frag mal im unix forum.

    und wie leuft das mit den shell zugang ab? kann er das script starten, sich dann auslogen und später einlogen um zu sehen was das programm inzwischen für ausgaben gemacht hatt?

    mhm, da musst du auch im unix forum fragen.
    das kommt darauf an, wie so ein zugang aufgebaut ist. theoretisch muesste das script aber weiter rennen.



  • Gerard schrieb:

    und wie leuft das mit den shell zugang ab? kann er das script starten, sich dann auslogen und später einlogen um zu sehen was das programm inzwischen für ausgaben gemacht hatt?

    Klar, Du kannst die Ausgaben in eine xbeliebige Datei umleiten und/ oder einfach screen verwenden, das ist ein extrem geniales Programm das hierbei ganz praktisch sein könnte... 🙂

    edit: Wobei es hier allerdings wahrscheinlich schon mit einem einfachen

    scriptname > output.text 2>&1 &
    

    getan ist.



  • kanns du mir sagen was 2>&1 & in

    scriptname > output.text 2>&1 &
    

    bedeutet?



  • schade das ich das ganze nicht über die funktion system aufrufen kann, dann breuchte ich nicht auf marc++us warten



  • Gerard schrieb:

    kanns du mir sagen was 2>&1 & in

    scriptname > output.text 2>&1 &
    

    bedeutet?

    Klar; mit folgendem Code leitet man cout in eine Datei um:

    script > datei.text
    

    So leitet man cerr in eine Datei um:

    script 2> datei.text
    

    Und per

    script > datei.text 2>&1 &
    

    leitest Du sowohl cout als auch cerr-Ausgaben in eine Datei um und sagst dem Skript außerdem dass es im Hintergrund laufen soll (allerletztes Ampersand). 🙂


Anmelden zum Antworten