Portál AbcLinuxu, 12. května 2025 11:20

Dotaz: php deamon

11.12.2012 11:59 pepa
php deamon
Přečteno: 346×
Odpovědět | Admin
Zdravím, chtěl bych si udělat démona v PHP, napsal jsem tedy do google php deamon a našel spoustu informací, ale najak mi nedochází proč to vlastně řešit přez nějaké Třidy k tomu určené, nestačilo by prostě jen:
while(TRUE){
...
}
Díky za objasnění.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.12.2012 12:12 NN
Rozbalit Rozbalit vše Re: php deamon
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bezici HTTP server ti nestaci ?
11.12.2012 13:27 DK
Rozbalit Rozbalit vše Re: php deamon
Odpovědět | | Sbalit | Link | Blokovat | Admin
tak chces daemona, nebo nekonecnou smycku? na to druhe bude stacit nohup / screen s tim while

na daemona budes potrebovat toto - http://pear.php.net/package/System_Daemon
AraxoN avatar 11.12.2012 13:54 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: php deamon
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mám za sebou už pár PHP démonov a čisté PHP je v pohode. Či to bude priamo v globálnom kontexte, alebo si k tomu urobíš vlastné triedy, to je na Tebe. Namiesto while (true) som používal while ($running) a $running sa potom vypínal cez signal handler. Stop bol potom implementovaný cez kill, ktorý poslal signál. Na začiatku ešte pred while pomôže poznačiť si niekam na disk svoj PID, aby si neskôr vedel čo máš killnúť.

Pear mi nejak neučaroval a úspešne sa mu vyhýbam.
11.12.2012 14:00 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: php deamon
A neumůže se ten démon ukončit přes max_execution_time v nastavení PHP, nebo jak toto řešíte?
AraxoN avatar 11.12.2012 14:05 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: php deamon
Na to samozrejme treba set_time_limit(0)
rADOn avatar 11.12.2012 15:17 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php deamon
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na daemonizaci potrebujes:
  1. fork()nout a rodice ukoncit.
  2. od setsid() si nechat pridelit novou skupinu (vznikne novy session leader)
  3. znovu fork()nout. Rodic exituje, detatko prebere pod sva kridla init.
  4. chdir() na nejake rozumne misto (aby sel pripadne odpojit fs pod aktualni cwd)
  5. odpojit se od tty :
    1. Pozavirat otevrene fd (nejlepe vsechny cisla, muzes nejake podedit od rodice. nevetsi mozne cislo fd ziskas pres getrlimit(), nebo proste volas close() dokud nedostanes EBADF)
    2. ziskat nove fd na /dev/null a dup() nout je do stdout a stderr (libc bez nich nepremava)
  6. bezny uklid: nastavit rozumnou umasku, udelat pidfile, osefovat signaly, dropnout suid…
Samozrejme udelat tohle vsechno v php je trivka a daemoni se v php bezne nepisou proto ze lidi jsou kokoti co si radi pridelavaji praci.

"2^24 comments ought to be enough for anyone" -- CmdrTaco
11.12.2012 20:00 Skřivy | skóre: 10
Rozbalit Rozbalit vše Re: php deamon
Zkoušel jsi v php používat vlákna/procesy a komunikaci mezi nimi? Takže možná důvod je, že ne všichni se spokojí s while(true) { ... }

Samozřejmě neříkám, že to použití je špatné. Je to jednoduché a znám spousty případů, kde se to hodí. Jenom bych všechny ostatní nenazýval kokoty.

Nerad bych tady vyvolal nějaký flame, takže kdyžtak prosím konkrétně k tomu prvnímu problému. Osobně jsem to zkoušel a prohrál jsem.
rADOn avatar 12.12.2012 10:51 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php deamon
To mela byt ironie. Me proste serou lidi ktery vymysli narovnavak na ohejbak jen aby nemuseli opustit zasmradly teplicko php. Ono by se to dalo zaridit pres nejaky ty daemonizovaci nastroje nebo knihovny, ale i tak clovek musi vedet co je jeho tty, pidfile a takovy ty veci.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
11.12.2012 20:53 l4m4
Rozbalit Rozbalit vše Re: php deamon
Existuje sice daemon(), ale nemá úplně jasnou sémantiku, takže na vážnější věci taky nic moc.

Na druhé straně na jednoduché (experimentální!) věci bych proti přístupu: čtu stdin, píšu na stdout, ať si mě inetd/xinetd/systemd/... spustí, jak umí, vůbec nic nenamítal.
pavlix avatar 12.12.2012 12:29 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: php deamon
Tohle je jedna z věcí, které mám prozměnu na systemd rád. Že už není potřeba používat přesně tyhle, ten termín už tu někdo použil, rovnáky na vohejbák (aka démonizace), ale může ten software úplně normálně nechat spustit (fork+exec) z programu, který je k tomu určený.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
rADOn avatar 12.12.2012 17:02 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php deamon
Obavam se ze to neni vymysl systemd. Daemonizacni nastroje jsou stara vesta, Poettering to akorat nacpal lidem do krku vetsi silou nez treba DJB. Proto je z toho tolika lidem na zvraceni :-)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
pavlix avatar 12.12.2012 17:10 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: php deamon
Obavam se ze to neni vymysl systemd.
Obávám se, že jsem to ani netvrdil :).
Poettering to akorat nacpal lidem do krku vetsi silou nez treba DJB.
To bude asi tím, že DJB psal věci (snad i úmyslně?) tak, aby se nemohly nikdy v mainstreamu prosadit, zatímco Lennart se rozhodl, že to mainstreamu nacpe.
Proto je z toho tolika lidem na zvraceni :-)
Mně je na zvracení spíš z toho, když se desítky let udržují nesmyslné hacky pro něco, co je naprosto běžné, v tomto případě spouštění systémových démonů.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.