Bir php script hala çalışıyorsa nasıl kontrol

7 Cevap php

Ben bir sıraya dinler bir PHP komut dosyası var. Teorik olarak, ölmek gerekiyordu asla. Hala çalışıyor olmadığını kontrol etmek için bir şey var mı? (http://god.rubyforge.org/), PHP için Ruby'nin Tanrı gibi bir şey?

Allah agnostik dil ama aynı zamanda pencerelerin üzerinde çalışan bir çözüm olması güzel olurdu.

7 Cevap

Ben aynı sorunu vardı - bir script çalışıyor olup olmadığını kontrol etmek isteyen. Yani bu ile geldi ve ben bir cron işi olarak çalıştırın. Bu dosya adı için her hat ve kontroller olsa bir dizi ve döngü olarak çalışan süreçleri kapmak. Ince iş gibi görünüyor. Script müşteri # kullanıcı # değiştirin.

exec("ps -U #user# -u #user# u", $output, $result);
foreach ($output AS $line) if(strpos($line, "test.php")) echo "found";

Sadece komut sonra ikinci bir komut ekleyecektir. Durursa, ikinci komut çağrılır /. Örn.:

php daemon.php 2>&1 | mail -s "Daemon stopped" you@example.org

Edit:

Teknik olarak, bu hemen mailler çağırır, ama php script sona erdiği yalnızca komutu tamamlar. Bunu yapmak php-script çıkış yakalar ve komut durdurmak için neden ne hata ayıklama için yararlı olabilir posta vücutta içerir.

Basit betik

#!/bin/bash
while [true]; do
    if ! pidof -x script.php;
    then
    	php script.php &
    fi
done

Değil pencereler için, ama ...

Ben bir kabuk sarma sahip uzun soluklu PHP bir çift var. İsteğe bağlı olarak, çıktıktan hemen yeniden başlatın, ya da birkaç saniye için uyku-ve ardından yeniden başlatmak için kabuk-komut kontrol edilecektir komut bir değer döndürebilir.

İşte elle durdu kadar sadece PHP komut dosyası çalışmaya devam basit biri.

#!/bin/bash
clear
date
php -f cli-SCRIPT.php
echo "wait a little while ..."; sleep 10
exec $0

"Exec $ 0" sonra çözülmeye (ve arada kaynaklarını almak) zorunda olacak bir alt sürecini yaratmadan, komut dosyasını yeniden başlatır. Bu betik bir posta gönderen sarar, böylece çıkar ve bir an için duraklar eğer bir sorun değil.

Olası bir çözüm bu soket işlevlerini kullanarak bir bağlantı noktasını dinlemesi sahip olmaktır. Sen soket hala basit bir script ile dinlemekte olduğunu kontrol edebilirsiniz. Pingdom gibi bile bir izleme servisi durumunu izleyebilir. O ölürse, soket dinleme artık.

Çözümleri bol .. İyi şanslar.

Eğer senaryo üzerinde ellerinizi varsa, sadece db bir zaman değerini her X kez ayarlamak için ona sorabilirsiniz, ve bu değer güncel ise, o zaman bir cron işi kontrol edelim.

troelskn yazdı:

Sadece komut sonra ikinci bir komut ekleyecektir. Durursa, ikinci komut çağrılır /. Örn.:

php daemon.php | mail -s "Daemon stopped" you@example.org

Bu bir çizgi daemon.php basılır mail her zaman arayacak (hala asla olması gereken, ama.)

Bunun yerine, komutları ayırmak için çift işareti operatörünü kullanın yani

php daemon.php & mail -s "Daemon stopped" you@example.org