2011-12-30 38 views
28

Biz paralel olarak çeşitli görevleri çalıştırmak için PHP Gearman işçi kullanın. Her şey gayet iyi çalışıyor ve onları istediğimde döndürmek için aptalca küçük kabuk betiğim var. Bir programcı olmak (ve bu nedenle tembel), bunları bir uptart komut dosyasıyla çevirip çekemeyeceğimi görmek istedim.başlayarak birden sonradan görme örnekleri otomatik

description "Async insert workers" 
author  "Mike Grunder" 

env SCRIPT_PATH="/path/to/my/script" 

instance $N 

script 
    php $SCRIPT_PATH/worker.php 
end script 

Ve bu yüzden gibi onları başlatmak için, büyük işler:

sudo start async-worker N=1 
sudo start async-worker N=2 

Ben örnek dörtlük kullanmak, bu yüzden bir örnek numarası ile onları başlayabileceğini yolunu bulmuştur Bu işçileri kullanmak istediğim yol, bazı sayıları (belki çekirdek başına bir tane vb.) açmaktır ve bunu başlangıçta yapmak istiyorum. Net olmak gerekirse, çekirdek sayısını algılamak için yukarı akış komut dosyasına ihtiyacım yok. Sadece "8 vaka yap" dediğim için mutluyum, ama bu yüzden birden çok koşu yapmak istiyorum. Otomatik olarak bunu yapmak için bir başlatma komut dosyasındaki "başlangıç" maddesini kullanmamın bir yolu var mı?

Örneğin, örnek 1, 2, 3, 4 başlar? Onları düzgün bir şekilde kapatmadan çıkar mısınız? Herkes bu sorunu çözdüm eğer

Ben bir init.d betikleri içine bu kanca herhalde, ama sonradan görme böyle bir şey işleyebilir acaba ya.

Şerefe çocuklar! İhtiyacınız ne

cevap

40

her biri başlayarak tüm işçi işler üzerinde başlangıçta ve dolaşır üzerinde çalışan bir önyükleme görevdir.

#/etc/init/async-workers-all.conf 

start on runlevel [2345] 

task 

env NUM_WORKERS=8 

script 
    for i in `seq 1 $NUM_WORKERS` 
    do 
    start async-worker N=$i 
    done 
end script 

anahtar bu onun için bir etkinlik yayan önce tamamlanması için görev çalışmasına izin sonradan görme anlatıyor bir görev, yapmaktır. çok http://upstart.ubuntu.com/cookbook/#task ve http://upstart.ubuntu.com/cookbook/#instance

+0

Teşekkür bakın! Benzer bir şekilde çalışmayı denedim, ama 'görev' biti eksikti, bu yüzden ilmekin ilk iterasyonu sadece engelleyecekti. Muhteşem. :) – mkgrunder

+11

Ayrıca sadece birden çok örneği başlatmak için izin verdiğini http://stackoverflow.com/questions/12084025/restarting-upstart-instance-prcesses ödeme değil, aynı zamanda onları durdurmak gerekir. – Evgeny

+0

Dokümantasyonu okudum ama hala anlamadım, bu döngü bir görev olmadıkça neden ilk yinelemesinde engelleniyor?/cc @mkgrunder – Mahn