Folyamatosan futó PHP script, timeout nélkül?
Tanácsra van szükségem.
Előtte felvázolom a hátteret.
Egy olyan XML fájlt generáló scriptet készítek, amely Oracle adatbázisból dolgozik, és PHP nyelven íródott. Az Oracle adatbázisban található adatmennyiség olyan méretű, hogy ha egy db XML-t generálnék, az várhatóan több száz megás méretű lenne.
Ezt azonban nem szeretném, az okok:
- a PHP timeout beállításai,
- a generálásra használt szerver korlátozott kapacitásai,
- a kockázat, hogy ha 24 óra futás után talál hibát a script, kezdhetem elölről a generálást.
Ezért úgy döntöttem, hogy több darabban hozom létre a legenerált XML fájlt.
Ehhez viszont a következő futás során használatos lekérdezésben szükséges kezdő azonosító értékét le kell tárolnom egy fájlban, majd meghívnom a scriptet újra, új paraméterrel.
(pl. MySQL-ben így nézne ki a lekérdezés: SELECT * FROM tabla WHERE id>'$kovetkezo' LIMIT 0,10000; ahol a $kovetkezo értékét a fájlból kapja a script az újbóli futás előtt)
Ehhez azonban folyamatosan figyelnem kell annak a fájlnak az értékét, amely a $kovetkezo változó értékét tartalmazza. Hogyan lehet PHP-ban ezt megoldani? Lehet olyan scriptet írni, amely folyamatosan fut a szerver memóriában, és figyeli egy változó értékét/fájl állapotát, timeout nélkül?
Minden tippet, tanácsot előre is köszönök.
Laci
■ Előtte felvázolom a hátteret.
Egy olyan XML fájlt generáló scriptet készítek, amely Oracle adatbázisból dolgozik, és PHP nyelven íródott. Az Oracle adatbázisban található adatmennyiség olyan méretű, hogy ha egy db XML-t generálnék, az várhatóan több száz megás méretű lenne.
Ezt azonban nem szeretném, az okok:
- a PHP timeout beállításai,
- a generálásra használt szerver korlátozott kapacitásai,
- a kockázat, hogy ha 24 óra futás után talál hibát a script, kezdhetem elölről a generálást.
Ezért úgy döntöttem, hogy több darabban hozom létre a legenerált XML fájlt.
Ehhez viszont a következő futás során használatos lekérdezésben szükséges kezdő azonosító értékét le kell tárolnom egy fájlban, majd meghívnom a scriptet újra, új paraméterrel.
(pl. MySQL-ben így nézne ki a lekérdezés: SELECT * FROM tabla WHERE id>'$kovetkezo' LIMIT 0,10000; ahol a $kovetkezo értékét a fájlból kapja a script az újbóli futás előtt)
Ehhez azonban folyamatosan figyelnem kell annak a fájlnak az értékét, amely a $kovetkezo változó értékét tartalmazza. Hogyan lehet PHP-ban ezt megoldani? Lehet olyan scriptet írni, amely folyamatosan fut a szerver memóriában, és figyeli egy változó értékét/fájl állapotát, timeout nélkül?
Minden tippet, tanácsot előre is köszönök.
Laci
Timeout
http://www.php.net/function.set-time-limit
Ha nullara allitod, akkor nem lesz limit.
A timeout OK, nem ez a gond
Köszi!
A timeout nem probléma, azt nullára állítom, ha kell. Ezzel azonban csak azt érem el, hogy végtelen ideig futhat a scriptem, és a végén kapok 1 darab XML output fájlt.
Én szeretnék több darab fájlt kapni, úgy, hogy a generálást végző PHP script mindig újra meg újra lefut, az egyes futások végén pedig mindig kiad egy XML output fájlt.
Minden alkalommal, amikor elkészül egy (pl. 10000 rekordot tartalmazó) output fájl, a generáló script újraindulna, de már a következő 10000 rekordot nyomná ki a futás végén létrehozandó XML output fájlba.
Azt, hogy a következő futás során hányadik rekordtól kell lekérdeznie az adatbázisból az XML generáláshoz szükséges adatokat, az ekkor egy külső fájlban elhelyezett változó értéke határozza meg.
A generálást végző script tehát mindig más paraméterrel kell, hogy újra meghívásra kerüljön --> ehhez viszont a paramétert ki kell olvasni a külső fájlból.
A külső fájlt folyamatosan figyelni kell. A kérdés: lehet-e PHP-ben olyan, folyamatosan a memóriában tartózkodó scriptet írni, amely figyeli egy fájl állapotát és ettől függően hívja meg a generálást végző függvényt újra?
Laci
Szerintem egy futas alatt aka
A file-t en ugy figyelnem, hogy mondjuk 1 percenkent beolvasnam, es megneznem, hogy az ertek valtozott-e. Erre jo a sleep fgv.
egy lehetséges megoldás
Persze, mégegyszer, ehhez shell hozzáférés kell.
Egy fajta megoldas