2010-08-01 11 views
6

Bir python işlemini canlandırmak istiyorum ve şimdi bir ana işlem gibi çalışan bir artalanın olması ve 10-30 iş parçacığı açan başka bir sınıfı çağırmanın iyi bir uygulama olup olmadığını sormak istiyorum.Python daemonize

Sunucu grubu için bir izleme komut dosyası yazmayı planlıyorum ve her sunucuyu her 5 dakikada bir kontrol etmek istiyorum, her bir sunucu tam olarak 5 dakika kontrol edildi.

ben o (bir çeşit söz, ps auxf tarzı çıkışı) bu şekilde olmasını istiyorum:

|monitor-daemon.py 
\-check-server.py 
\-check-server.py 

....

teşekkür ederiz!

cevap

1

kullanmalıdır. Olayları yanıtlamak için görevleri yapılandırabilirsiniz. Olaylar, süreçleri izleyerek veya düzenli aralıklarla manuel olarak oluşturulabilir veya otomatik olarak oluşturulabilir.

Python'da tamamen özelleştirilebilir ve yazılmıştır.

Örnek:

[program:your_daemon_name] 
command=your_daemon_process 
# Add extra options here according to the manual... 

[eventlistener:your_monitor_name] 
command=your_monitor_process 
events=PROCESS_STATE_RUNNING # Will be triggered after a program changes from starting to running 
# Add extra options here according to the manual... 

Yoksa EventListener bir çek her dakika için olay PROCESS_COMMUNICATION_STDOUT veya TICK_60 kullanmak süreç çıkışına yanıt vermek istiyorum. Günlükler, dosyalara ve benzerlerine yeniden yönlendirilebilir, böylece her zaman durumu görüntüleyebilirsiniz.

+0

Teşekkürler, ama bu benim için bir overkill gibi görünüyor (şu anda) - Aşağıdakiler için herhangi bir öneriniz varsa: (üzgünüm kendimi tekrarlarsa) - Daemon her şey yolunda mı kontrol eder - Aramalar (örnek) MyMonitor() onay() -. MyMonitor.check() görevleri sahiptir - DB (SQLite/MySQL) verileri alır - her bir veri girişi verileri ve açık konu geçer - dayalı çıkış başka eylemler var (başarısız bağlantı noktası - e-posta gönder) - oluşturulanlar kapanıyor Konular N00bish stili için özür dilerim ama ek modüller kullanmadan önce her şeyin yerinde olup olmadığını kontrol etmek istiyorum. – abiko

+0

Örnek bir abiko ekledim, belki bu yardımcı olacaktır. Örnek olay dinleyicisi için belgelere bakın: http://supervisord.org/events.html#example-event-listener-implementation – Wolph

+0

Evet, süpervizör aşırı ve aşırı karmaşıktır. Alternatif bir cevapta önerildiği gibi http://pypi.python.org/pypi/python-daemon'u kullanmaktan daha iyidir. – aculich

8

Belki Bunun için supervisord kullanabilirsiniz http://pypi.python.org/pypi/python-daemon

+0

Evet, süpervizör yerine python-daemon kullanın! python-daemon, PEP 3143, "Standart daemon süreç kütüphanesi" nin iyi niyetli davranışlarını uygular: http://www.python.org/dev/peps/pep-3143/ – aculich

+0

hala bir python-daemon ile denetleyiciyi kullanabilirsiniz. ;-) – Stefano

-1

gerçekten kendi daemonize fonksiyonunu oluşturmak için çok fazla bir şey yok: Unix Environment (2. baskı) İleri Programlama için kaynak serbestçe mevcuttur: http://www.apuebook.com/src.tar.gz - Eğer apue.2e/daemons/init.c dosyanın arıyoruz.

small helper program, düzgün bir daemon oluşturmanın tüm çalışmalarını yapan, bu keyfi programları sarmak için kullanılabilir; Bu bazı güçlüklerden kurtarabilir.