ugrás a tartalomhoz

Hosszú PHP script futtatása Debian + Apache alatt

tisch.david · 2010. Aug. 5. (Cs), 15.18
Sziasztok!

Van egy import PHP scriptem, ami akár fél óráig is elmolyolna - ha hagynák. De valami miatt kb. 15 perc után a következő hibát kapom:
ERROR
The requested URL could not be retrieved
While trying to retrieve the URL: ...

The following error was encountered:
* Read Timeout

The system returned:
[No Error]

A Timeout occurred while waiting to read data from the network. The
network or server may be down or congested. Please retry your request.
A set_time_limit(3600) természetesen megvolt. Hol nézzek még körül? Hol léphet fel vajon ez a time out?

Előre is köszönöm a válaszokat!
Üdv:

Dávid
 
1

Hogyan indítod el a scriptet?

inf3rno · 2010. Aug. 5. (Cs), 17.19
Hogyan indítod el a scriptet?
Valószínűleg a scriptet hívó cucc az, ami timeout-ol, bár nem 100%.
2

Webszerver

janoszen · 2010. Aug. 5. (Cs), 18.15
Ha tippelnem kene, vagy a webszerver timeoutol, vagy maga a TCP. Az utobbira megoldas lehet, ha idonkent kuldesz valami kimenetet es flusholsz is. Ettol fuggetlenul mindenkeppen allitsd be az ignore_user_abortot. Ha ezt a muveletet nem csak egyszer akarod elvegezni, erdemes hatterben cronbol vagy pl. Gearmanbol futtatni, azok ugyanis sokkal uzembiztosabbak erre.
3

Hol lehet állítani?

tisch.david · 2010. Aug. 9. (H), 08.55
Sziasztok!

Köszönöm a válaszokat! Az importot böngészőből indítják, egy szabályos HTTP GET hívással. A feldolgozó script pedig tartalmazza a
set_time_limit(3600);
ignore_user_abort(true);
sorokat.
Hogyan tudom kideríteni, hogy mi timeout-ol? Helyi (windowsos) gépen Apache alatt futtattam már olyan PHP scriptet is, ami 8 órán keresztül futott, mégsem hasalt el. Mivel ott sem flush-oltam közben semmit, azt gondoltam, hogy megy ez anélkül is. Tudtok még valami ajánlani? A szerver üzemeltetőit (gondolom, inkább Linux guruk mint Apache mágusok) érdemes zargatnom?

Köszi előre is! Üdv:

Dávid
4

ini_get

Poetro · 2010. Aug. 9. (H), 09.00
6

?

tisch.david · 2010. Aug. 9. (H), 09.53
Lehet, hogy le vagyok ma lassulva, de miért linkelted be az ini_get kézikönyvét?
5

Megteheted

janoszen · 2010. Aug. 9. (H), 09.25
Megteheted, hogy megkérded a rendszergazdákat, de az, hogy a Te otthoni szervereden mi működik, mi nem, irreleváns, mert egyrészt helyi gépen fut (elméleti végtelen sávszélesség, 0 packet loss), másrészt az fejlesztési beállításokkal megy, nem osztott szerver beállításokkal. Mint már írtam, nem ez a korrekt megoldása a problémának. Annyi sebből vérzik, hogy nem is győzöm összeszámolni. Magadnak és a szerverüzemeltetőknek is jópár munkaórát megspórolnál, ha megoldanád rendesen.
7

Kifejtem...

tisch.david · 2010. Aug. 9. (H), 10.04
Szia!

Ez egy olyan import, amit egy webáruház admin felületén az áruház üzemeltetője indít, és ami az általa feltöltött, általa definiált struktúrájú CSV fájlból frissíti az áruházának kínálatát. Erre a feladatra készítettem ezt a megoldást, és nem sejtettem, hogy ilyen problémákba ütközöm.
Ennek ismeretében mit javasolsz?

Üdv:

Dávid

U.I.: A helyi gépen való futtatást csak azért említettem, mert - lehet, hogy helytelenül - az alapján azt gondoltam, hogy nem az Apache a ludas.
8

Hatter

janoszen · 2010. Aug. 9. (H), 18.25
Ennek a feladatnak szerintem, hatterbol kell futnia. User feltolja a fajlt, majd kisvartatva arra jar egy cronjob, megmarkolja a feladatot, megjeloli, hogy folyamatban (az egymasra futas megakadalyozasa vegett), majd ha vegzett a betoltessel, kuld egy mailt a usernek.
9

Utoló kérdés...

tisch.david · 2010. Aug. 10. (K), 11.46
Szia!

Köszi az eddig rám szánt időt! Két kérdésem maradt már csak:
1. Ha - ajánlásod szerint - háttérben akarom futtatni a feladatot, akkor erre milyen nyelvet/eszközt javasolnál?
2. Ha mégis maradni szeretnék az én "fából vaskarika" megoldásom mellett, akkor meg tudnád mondani, hogy hol próbáljak utána nézni ennek a timeoutnak? (Az Apache config az nyilván a httpd.conf-ban van, de a TCP config (?) az hol? Vagy ezt már inkább a rendszergarázdától kérdezzem?)

Köszi! Üdv:

Dávid
10

Bármit

janoszen · 2010. Aug. 10. (K), 13.09
Szia,

  • Akár PHP-ban is megírhatod. Itt van hozzá egy kis segédlet: Nagy terhelésű rendszerek fejlesztése 2. (Bár nem cronjobról szól, de hasznos lehet, ha megismered.)
  • Ha Apacheból szeretnéd futtatni a feltöltést, akkor nagyon korlátozottak a lehetőségeid. A TCP timeoutját vagy esetleges szakadását nem fogod tudni állítani, mert a kliens gép együtt működése is kell hozzá. Ha feltétlenül ezt választod, akkor több részletben csináld. Első menetben töltsd föl a fájlt, majd AJAX-szal pollozd a szervert, ami pedig tudjon részletekben is dolgozni (ergó ha megszakad, tudja folytatni).


János
11

Köszönöm!

tisch.david · 2010. Aug. 11. (Sze), 10.18
Az említett cikkedet már megjelenésekor olvastam. Most majd mégegyszer átnézem. Nem szerettem volna ilyen nagy feneket keríteni ennek az apró részfeladatnak, de úgy tűnik, hogy nem lesz más megoldás.

Köszönöm a segítséget!
Üdv:

Dávid