From: Umut PHP (php@kakalak.org)
Date: Thu 24 Jul 2003 - 13:57:54 EEST
Merhaba
Belki bir daemon yazmak icin dogru bir dil secimi degil ama
basitliginden ve ona hakim oldugumdan dolayi php ile bir
daemon yazmaktayim.
ancak bir kac kucuk problemim var:
1. ayni anda request geldigi zaman anladigim
kadariyla biri bittikten sonra digeri islem goruyor.
eger ilkinin bitmesi uzun surerse o zaman
ikinci client socket error veriyor. bunu cozmek
icin fork kullanmam gerek, bu da pcntl uzantilari
ile olacak. cozumunu yazdim ama ilk problemim bu.
google ile bir kac ornek buldum, uzerlerinde calisiyorum.
umarim dogru yoldayimdir.
2. daemon'u kendi icinden restart etmek istiyorum.
bunun icin bir yerde
if ($opcode=="restartme") {
system("/usr/local/bin/wadixd &");
writelog("Shutting down...");
terminateclient();
shutdownserver();
writelog("Wadixd shutdown complete.");
exit;
}
cagiriyorum. once ayni socket'e bind etmeye calistigi
icin problemdi. ben de wadixd'nin basina bir sleep
koyarak sockete baglanma isini geciktirdim.
bunda problem yok. ancak exit gormesine ragmen
ilk calisan daemon hala aktif process olarak gorunuyor.
bir ihtimal termina.... ve shu.... fonksiyonlari icinde
bir hata olabilir ama onlar sadece socket close yapiyorlar.
tum hatalar log dosyasina da yaziliyor ama nedense
log dosyasinda complete yaziyor ancak process hala
aktif gorunuyor ps -aux ile bakinca.
3. yine ayni sekilde mysql'i baslatmak istedigimde
system("safe_mysqld &");
yeni mysql basliyor basarili olarak. ancak
benim daemonum cagrilara cevap vermeyi birakiyor.
ustelik netstat ile baktigimda artik benim socketimin
"sh"'a gectigini goruyorum. pid'den bakinca da o anda
safe_mysqld tarafindan kullanilan pid cikiyor karsima.
daemon zaten cagrilara cevap vermiyor ve log dosyasina
hata yazmiyor herhangi bir sekilde. apache, named ve
bazi baska minik programciklara denedim ancak
sadece mysqld ile bu sorunu yasiyorum.
4. aslinda 2 ile 3 arasinda bir benzerlik var, simdi
kesfettim. belki php'nin system() fonksiyonu icinde
& kullaninca bilmedigim birseyler oluyordur.
simdi onlari arastirmaya gidiyorum. eger & isaretinden
kaynaklaniyorsa mysql'i nasil baslatabilirim alternatif olarak?
saygilar.
Umut.