Cron son cron yürütme öldürmek mi?

3 Cevap php

Ben bir cron işi yürütür bir PHP komut dosyası var. Cron her dakika çalıştırmak için kurulum, bu sadece test amaçlı yapılır. Bu çalıştırdığı PHP komut dosyası flash biçimine (örn. ... flv) kullanıcılar tarafından sunucuya yüklenen videoları dönüştürmek için tasarlanmıştır. Elle komut satırı aracılığıyla bunu yaparken komut, ince yürütür cron üzerinden yürütülürken ancak ince başlar ama bir dakika sonra sadece durdurur.

It seems that when the next cron is executed it "kills" the last cron execution. I added the following PHP function:

ignore_user_abort(true);

Bu son yürütme iptal olmaz umuduyla, ben gayet iyi çalışıyor, her 5 dakikada bir, çalıştırmak için cron ayarı test edilen, ancak bir video dönüşüm yüzden başka cron zaman neden onun stoping anlamaya gereken 5 dakika sürebilir idam.

Herhangi bir yardım mutluluk duyacağız.

Teşekkür ederiz!

EDIT: My cron looks like:

*/1 * * * * php /path_to_file/convert.php

3 Cevap

Ben cron herhangi süreçleri öldürür sanmıyorum. Ancak, cron uzun süren işlemler için gerçekten uygun değildir. Ne Buradaki olabilir birden çok kez çalıştırıldığında script kendisi çiğnemeyi olmasıdır. Örneğin, her iki PHP süreçler aynı anda aynı dosyaya yazmak için çalışıyor olabilir.

Öncelikle, php hata günlüğüne bakmak değil, aynı zamanda PHP dosyası kendisinden çıkış yakalamak için denemek değil, sadece emin olun. Örn:

*/1 * * * * * php /path/to/convert.php & >> /var/log/convert.log

Ayrıca convert.php birden çok kez idam değildir sağlamak için basit bir lockfile kullanabilirsiniz. Gibi bir şey:

if (file_exists('/tmp/convert.lock')) {
    exit();
}

touch('/tmp/convert.lock');
// convert here
unlink('/tmp/convert.lock');

cron kendisi bir sorun varsa, bir şey onu yapıyor PHP hemen hemen kesinlikle, yani çalışan bir iş bir önceki örneği durmayacak. Sen bu kodu göndermek gerekir.

Hayır, olmaz. Her kaçak için komut kontrol kilit dosyası oluşturarak çalıştıran ikinci bir süreç tutabilirsiniz. Dosya varsa, bu çalışmaz. Bir işlem süresiz gelecek infaz durak kalmaması bu aynı zamanda, uygun olduğu takdirde, bir azami işletim süresi ile çakışma içinde kullanılmalıdır. Kilit dosyası sadece / tmp / foo.lock adında boş bir düz metin dosyası olabilir.