PHP ile yazılmış bir cini ignore_user (0) iptal ve set_time_limit kullanarak, nasıl mümkün olduğunu

4 Cevap php

Ben cinleri ile ilgili emme ve (bellek ve işlemci kullanımı ve güvenilirlik açısından) PHP kullanarak bunu yapmak ne kadar mümkün merak ediyorum:

<?php
// Ignore user aborts and allow the script
// to run forever
ignore_user_abort(true);
set_time_limit(0);

$fp = fopen('loop.log', 'w');
fwrite($fp, date('Y-m-d H:i:s') . ' Started' . PHP_EOL);
while(1) {
    fwrite($fp, date('Y-m-d H:i:s') . ' Looped' . PHP_EOL);
    if (file_exists('loop.stop')) {
    	break;
    }
    // Sleep for 100 seconds
    sleep(100);
}
fwrite($fp, date('Y-m-d H:i:s') . ' Stopped' . PHP_EOL);
fclose($fp);

Bu basit örnek için (PHP kılavuzda uyarlanan ignore_user_abort) sadece konteyner yazısıdır. Gerçek işlevi while döngü içine yerleştirilecektir.

Ben şimdi 7 saat boyunca benim laptop üzerinde çalışan bu komut dosyası var ve bu iyi görünüyor, ama çok yapmaz. Başkasının bu çalıştı?

4 Cevap

Herhangi bir PHP kaynaklar düzenli olarak temizlenir, böylece ben, bir betik içine döngü koymak eğiliminde olacaktır.

#!/bin/bash
clear
date

php -f doChecksAndAct.php
sleep 100
# rerun myself
exec $0

Eğer PHP komut dosyası herhangi bir özellikle ağır-to-kurulum görevleri yapıyor olsaydı (onlar arasında çoklu saniye durmuyor olsaydı, 50-100 yineleme diyelim), ayrıca toplam azaltmak için orada bir küçük (imsi) döngü koyabilirsiniz koşular arasında havai zaman.

Çok kolay bir PHP komut döngü, sonra çıkın hemen yeniden başlatın, ya da bir süre için ara vermek böylece Addition: Ben bir Bash / PHP (veya diğer dil) eşleştirme ilgili bloğumuz var - {[(1 )]}.

Ben buna karşı tavsiye ederiz.

Memory allocated for objects created in object methods is not released diyor ki 4 yıl önce açık bir hata var.

Devs bu bir Feature request düşünebilirsiniz ancak uzun soluklu süreçleri kullanarak olduğunda çevresinde çalışmak çok zor. Ben çalıştım ama uygulamayı emekli mümkün iken son derece rahatladım.

Ben tür bir iki fikir birleşme, sen cron'nun tüm yararları elde bu şekilde, ve sonsuza kadar PHP çalışan dezavantajları olmayan cron PHP komut dosyası çalıştıran öneririm.

sonic sunucusu arka plan lutfen kontrol dışarı değer olabilir

http://dev.pedemont.com/sonic