wget / curl üzerinden uzun zaman Cron?

3 Cevap php

I am working on cron jobs for my php app and planning to use cron via wget/curl. Some of my php cron jobs can take 2-3 hours. How to let php work 2-3 hours from cron tab ? Is it good practice to run such long time jobs via cron wget/curl ? Anyone got experience on this ? I also have email queue and i needs to be run every 10 seconds, but cron tab is minute level. Any suggest on this case ?

Okuduğunuz için teşekkürler.

3 Cevap

Wget / curl kullandığınızda, bir web sunucusu bir sayfa için talep ediyoruz. Her webserver bir zaman aşımı süresi var, bu yüzden bu zaman aşımına olabilir.

Ayrıca barındırma sağlayıcıları bazı (temelde sahte konuları kontrol etmek için yapılan) belirli dakikada dışında çalışan işlemini durdurabilir.

Bu yüzden işi birkaç dakikadan fazla sürerse wget / curl kullanarak zamanlama tavsiye edilmez.

Gerçek zamanlayıcı kullanarak zamanlama deneyin. Komut satırından php çalıştırabilirsiniz

php [options] [-f] [--] [args...]

php komutu yolu olmalıdır.

Etkili zaman aşımına asla PHP anlatmak için komut başında aşağıdakileri kullanabilirsiniz:

set_time_limit(0);

Crontab Eğer aynı anda çalışan iki kopyasını alamadım böylece 24 saat aşımını ayarlamak, komut dosyası her 24 saatte koşacak ne akıllıca olabilir, olduğunu.

set_time_limit(24*60*60);

O, çünkü crontab sadece dakikalık düzey yürütülmesini sağlayan en sık gerçekten bir script başlatılması olmalıdır - daha hızlı zamanlama verimsiz hale başlatma / kapatma maliyetleri vardır.

Uygulama her 10 saniyede bir kontrol edilmesi için bir sıra gerektiriyorsa daha iyi bir strateji olduğunu kontroller yapar ve sistem kaynaklarını hogging kendisini durdurmak için () bazen uyku kullanan bir tek uzun süre çalışan bir komut dosyası var olabilir.

Bir UNIX sisteminde böyle bir senaryo gerçekten bir daemon olarak çalıştırmak gerekir - bu basitçe yapılabilir nasıl görmek için PEAR System_Daemon paketi bakabilirsiniz.

Ben sadece cron ve wget üzerinden yürüttüğü uzun süren PHP ile sorun haline çalıştırmak. Komut wget varsayılan zaman aşımı nedeniyle 15 dakika sonra sona erer.

Ancak ben doğru zaman aşımı kurmak eğer bu yöntem aslında çalışmalarında yok inanıyorum. Çalıştırmak PHP komut dosyası sınırsız çalışma saati için ayarlanması gerekir. En uzun koşu yazısının başında bu ayarlamak için.

set_time_limit(0);

Wget kullanırken de geçen-T0'ı tarafından aşımını kaldırmak gerekir. örneğin

wget -q0 -T0 http://yourhost/job.php

Uzun süren komut ile sunucu aşırı için çok dikkatli olun.