Benim PHP beanstalkd plan süreçlerinin durumunu kontrol etme

2 Cevap php

Ben bazı kaynak yoğun görevler bir arka plan işlemi tarafından işlenir PHP (CakePHP) yazılı bir web sitesi var. Bu Beanstalkd mesaj kuyruğuna aracılığıyla yapılır. Ben bu yüzden Monit ile izleyebilirsiniz arka plan sürecinin durumunu almak için bir yol gerekir.

Arka plan işlemi Beanstalkd ile iletişim kuran bir CakePHP Shell (sadece PHP CLI komut dosyası) olduğunu. Bu sadece yeni bir ileti için Benastalkd ve bekler bir rezerv () yapar. Bir mesaj aldığında, onu işler. Ben yanlış bir şey gitti eğer arka plan işlemi yeniden böylece Monit ile bu süreci izleme bazı yol istiyorum.

Ne kadar düşünüyordum Beanstalkd bir mesaj düşer bir PHP CLI komut yazıyor. Arka plan işlemi mesajı alır ve bir şekilde geri CLI komut iç durum var iletişim kurar. Ama nasıl? Yuva? Paylaşılan hafıza? Diğer bazı IPC yöntemi?

Ya da belki de burada karmaşık varlık ve Monit ile böyle bir süreci izlemek için çok daha kolay bir yolu var ki?

Şimdiden teşekkürler!

2 Cevap

İşte sonunda yapıyor sona budur.

CLI komut, beanstalkd bağlanan yeni bir kuyruk (tüp) yaratır ve onu izlerken başlar. Sonra arka plan cini izliyor kuyrukta bir yüksek öncelikli mesaj düşer. Bu mesaj CLI komut gözlediği yeni sıranın adını içerir.

Arka plan işlemi (o yüksek öncelik olduğu için), hemen bu iletiyi alan bir durum iletisi oluşturur ve CLI komut izliyor kuyrukta koyar. CLI komut aldığı ve daha sonra kuyruğunu kapatır.

CLI komut dosyası 30 saniye içinde bir yanıt almazsa zaman plan cini belirten bir hata ile çıkmak olacaktır (büyük olasılıkla) kapattı.

Ben Monit içine tüm bu bağladılar. Monit şimdi arka plan cini (pidfile ve işlem listesi üzerinden) çalışıp çalışmadığını kontrol edin ve aslında hala (bu durum isteklerine yanıt verdiğini test etmek için CLI aracını kullanarak) iletileri işleme olduğunu doğrulayın

Muhtemelen, bağlanmak istatistikler çalıştırın ve 'çok' varsa dönmek Monit veya Nagios için bir eklenti var. Orada o zaten yazılmış bir 'protokol' değil, ancak t ne istediğinizi yapmak için varolan bir metin tabanlı (nntp gibi, veya smtp) birini değiştirmek için zor aşan olmak görünmüyor. Bu o bakışlarla olsa C yazmayı demek.

CLI-PHP script, iki farklı yöntemden biri (veya her ikisi) aracılığıyla bu konuda gitmek istiyorum.

1/ drop a (low-ish) priority message into the queue, and make sure it comes back within a few seconds. Putting it into a dedicated queue and making sure there's nothing there before you put it in there would be a good addition as well. 2/ perform a 'stats' and see how many are waiting: 'current-jobs-ready'.

Geri bir web sitesine bilgi (iki yönlü) almak için, bir dosyaya yazmak veya okumak ve üzerine hareket GTS Memcached gibi bir şey içine olabilir.