← Uz sākumu

PHP max_execution_time un Apache timeout

2006. gada 16. novembrī, 15 komentāri

Šodien nācās kārtējo reizi izzināt to, ko nekad līdz šim nav nācies. Ir ņekijs PHP skripts, kurš tiek izsaukts webiski. Tam ir jāizpildās nenoteiktu laiku. Ko mēs parasti darām? Vai nu konfigurējam max_execution_time INI mainīgo, vai arī izmantojam set_time_limit(0). Izrādās, ka tas vēl nav viss. Skipts anyway izbeidzās pēc 45 sekundēm. Ilgi raku.

Izrādās, ka Apache konfigurācijā ir mainīgais timeout, kurš vairāk vai mazāk brutāli nokauj attiecīgo procesu, ja tas karājas un, apačprāt, neko nedara ilgāk nekā iekš minētā mainīgā minēto laiku.

Risinājums, kā izrādās, ir vienkāršs. Apache procesu par taimautojušos uzskata tad, ja tas neko nekur nesūta un nesaņem. Pietiek reizi noteiktā laikā (bet ne retāk kā iekš timeout norādītajā) izsniegt apacim pa baitiņam (kaut vai punktiņus zīmēt vai <br style="display: none;"/> sūtīt), lai tas domātu, ka viss aizvien vēl notiek.

Ja nu kādam noder. Protams, zinu, ka šādus webiski izpildāmus ilgstošus skriptus taisīt nav pareizi. Bet dažreiz sanāk.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar BlackHalt

2006. gada 16. novembrī, plkst. 12:25

Redzkā šie abi nedraudzējas. Tas takā var saprast, apachim vajag kaut kādu nebūt autputu tai laikā?

Gravatar BlackHalt

2006. gada 16. novembrī, plkst. 12:28

Varbūt var slepeno papildus header nosuutiit. To arii neredz.

Gravatar laacz Autors

2006. gada 16. novembrī, plkst. 12:31

BH: Teorētiski var. Nebiju iedomājies.

Gravatar haa

2006. gada 16. novembrī, plkst. 13:05

īstenībā tieši vakar saskāros ar šo jautājumu. bija jāpalaiž konvertācijas skripts - uzliku time limit uz 0 un outputu... tagad domāju, ka redz cik labi, ka pieliku outputu, jo būtu sēdējis un prātojis, kāpēc killojas pēc 45sec :)

Gravatar Sm

2006. gada 16. novembrī, plkst. 13:08

A kapēc tas skripts nevarētu sūtīt kautko uz to pašu serveri?

Gravatar BlackHalt

2006. gada 16. novembrī, plkst. 14:05

Kā tas ir sūtīt kautko uz to pašu serveri? ?

Gravatar Krišs

2006. gada 16. novembrī, plkst. 17:14

Man jau liktos dikti patīkami, ja ilgi izpildāms process reportētu par to, kā viņam iet. Vienalga, vai tas pavērts no pārlūkprogrammas vai konsolē (tad gan laikam apache tur ne-pri-chom) ... informēšana par statusu ir LABI :-)

Gravatar archaic

2006. gada 16. novembrī, plkst. 18:37

Bet informēšana par statusu prasa resursus. Kaut gan - ļoti maz ir tādu uzdevumu, kur tam ir kāda nozīme.

Gravatar a

2006. gada 17. novembrī, plkst. 09:48

keep-alive option in httpd headers

Gravatar noisex

2006. gada 17. novembrī, plkst. 12:15

a kapec ne shelliski tiek laists?

Gravatar BigUgga

2006. gada 17. novembrī, plkst. 14:37

ar šitādu fīču/gļuku arī reiz saskāros. risinājums tieši tāds pats :)

noisex: reizēm tā vajag :)

Gravatar Kirils

2006. gada 18. novembrī, plkst. 22:05

shelliskaa palaishana izteeree vairaak papildus atminjas, nekaa caur apachi, kur php modulis jau ir ielaadeets.

Gravatar laacz Autors

2006. gada 20. novembrī, plkst. 18:49

sn: Kāpēc "lv2"? :)