Bir PHP komut dosyası runnging cron işlerin sayısını sınırlayın

4 Cevap php

Ben bir seferde 10 kullanıcı kapmak ve onlarla şeyler bir grup yapan bir günlük cron işi var. Bu sürecin bir parçası, her gün olan kullanıcılar 1000 vardır. Ben sunucu yükü ağır olarak cron işleri üst üste istemiyorum. Onlar çeşitli API'ler gelen şeyler aramak bu yüzden zaman aşımı ile uğraşmak getiriliyor yavaş veri var.

Ben çalışan bir cron işi işaretlemek için bir bayrak kullanarak denedim, ancak bazı PHP betikleri zaman aşımına veya çeşitli şekillerde başarısız olabilir gibi yeterince güvenilir değil.

PHP komut dosyası birden çok kez arayarak, ya da denir sayısını kontrol bir cron işi durdurmak için iyi bir yolu var mı, yani örneğin sadece 3 örnekleri vardır?

Mümkünse ben PHP bir çözümü tercih ederim.

Şu anda ben bir veritabanında bir değer olarak bayrağı saklamak ediyorum, burada olduğu gibi daha iyi bir kilit türü dosyasını kullanarak http://stackoverflow.com/questions/851872/does-a-cron-job-kill-last-cron-execution?

4 Cevap

Ben bir veritabanında bir tablo aracılığıyla yürütülen komut dosyalarını takip numarası kirli bir şekilde kullanılır. Bir başlatılan komut dosyası id ile bir satır ekler ve alan started_time. Çıkışta onun satır kaldırır. Çok eski satır "başarısız \ ölü komut" olarak kabul edilmektedir.

Işçi komut doğrudan cron tarafından başlatılan değildir. Cron aktif işçilerin sayısı için tablosunu denetler ve gerekirse daha fazla işçi çoğaltılır yani "launcher senaryoyu" her 1 saniye ya da başlattı.

Böyle bir düzeni zaten 2.5 yıldır benim için çevrimiçi çalışıyor. Sadece bazı Sürekli güncellenen içeriği kapma.

Ben benzer bir sorun vardı ve en kolay çözüm gibi görünüyordu benim kendi küçük cini yazı ile sona erdi.

Bağlantılar andthe blog yazısı - Eğer kabuk komut dosyalarını çalıştırmak için komut satırı erişimi varsa, ben de http://stackoverflow.com/questions/1006891/how-feasible-is-a-daemon-written-in-php-using-ignore-user-abort-and-set-time-lim/1008736#1008736 açıklamak gibi bir komut bir şeyler yazmak için eğimli olurdu. Bu cevap, ben verilerini işleyen uzun süren bir PHP komut dosyası açıklar. O çıktığında onun çalışmalarını tamamlamak, böylece, sarılır edilir betik yeniden başlaması / eğer.

PHP script gün için çalışmalarının tüm yapmış olduğu karar verdiği zaman tekrar çalıştırmak gerekiyor ve sonra sadece sleep($howLongToWaitTillRunAgain); arayana kadar, bu kaç saniye hesaplar

Sen tekrar tekrar bir komut dosyası çalıştırmak için Fat Kontrolörü kullanabilirsiniz. CRON aksine yine en kısa sürede bunun bir örneği biter gibi bir komut dosyasının başka bir örneğini çalıştırabilirsiniz.

Sen de şu anda şu anda yapacak başka bir şey ve Yağ Kontrol tekrar komut dosyasını çalıştırmadan önce bir süre uyku orada komut geri bildirim verebilir.

Eğer gerçekten maceracı hissettiğiniz, hatta kuyruk gerçekten dolu olup olmadığını Fat Kontrolör paralel komut birden çok örneğini çalıştırmak için alabilirsiniz, ama bu durumda sizin ne istediğinizi değil.

www.4pmp.com/fatcontroller/