Bir PHP komut dosyası her saniye kullanarak CLI çalıştırın

4 Cevap php

Bir Paralel PLESK panel ile özel bir sunucu çalışan Cent OS var. Ben veritabanını güncellemek için bir PHP komut dosyası her saniye çalıştırmak gerekir. Bu alternatif yolu zaman bilge, her saniye güncelleştirilmesi ihtiyacı var.

Ben URL http://www.mysite.com/phpfile.php?key=123 kullanarak benim komut dosyası bulabilirsiniz.

Dosya yerel her saniye idam edilebilir? Gibi phpfile.php?

Update:

Ben bu soruyu ekledi çünkü birkaç ay olmuştur. Ben aşağıdaki kodu kullanarak sona erdi:

#!/user/bin/php
<?php
$start = microtime(true);
set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    doMyThings();
    time_sleep_until($start + $i + 1);
}
?>

Benim cronjob her dakika ayarlanır. Ben bir test ortamında süredir bu çalışan edilmiştir ve harika çalıştı. Gerçekten süper hızlı, ve ben CPU ne de bellek kullanımı herhangi bir artış görüyoruz.

4 Cevap

Aslında PHP bunu yapabilirdi. Her saniye kontrolleri yapıyor, 59 saniye çalıştırın ve daha sonra sona erer olacak bir program yazın. that işlemini her dakika ve hey presto çalışan bir cron ile bu birleştirin.

Bir yaklaşım şudur:

set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    doMyThings();
    sleep(1);
}

Muhtemelen dikkat olurdu tek şey doMyThings() fonksiyonları çalışıyor zamanıdır. O bir saniyenin bir kısmını bile olsa, o zaman 60 yineleme üzerinde, bazı sorunlara neden kadar ekleyebilirsiniz. Eğer> = 5.1 (Windows ya da> = 5.3) PHP çalıştırıyorsanız o zaman time_sleep_until() kullanabilirsiniz

$start = microtime(true);
set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    doMyThings();
    time_sleep_until($start + $i + 1);
}

Eğer "izlemek" kullanarak düşündünüz mü?

watch -n 1 /path/to/phpfile.php

Sadece bir kez başlatmak ve devam edecektir. Bu şekilde çökmesini PHP bağışıklık (bu olur, ama asla bilemezsiniz). Hatta tamamen kurşun geçirmez yapmak için bu inittab ekleyebilirsiniz.

neden bunu yapmak için bir cron çalıştırmak ve php dosya döngü 60 kez hangi kısa bir uyku değildir. Ben bir php komut dosyası 5 kez bir dakika çalıştırmak için bu üstesinden yoludur.

Bir betik gibi bir perl isim listesi olarak ilk satırında sizin PHP yolunu eklemek gibi çalıştırmak için dosyayı kurmak için

#!/user/bin/php
<?php
    while($i < 60) {
      sleep(1);
      //do stuff
      $i++;
    }
?>

Ben OP onun çözümü vermek için cevap düzenlenmiş olduğunu fark ettim. Bu çözüm benim kutusunda işe yaramadı (PHP yolu yanlıştır ve PHP sözdizimi doğru değildir)

Bu sürüm (o idam böylece gibi whatever.sh ve chmod + X whatever.sh kaydedin) çalıştı

#!/usr/bin/php
<?php
$start = microtime(true);
set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    echo $i;
    time_sleep_until($start + $i + 1);
}
?>