2010-04-14 15 views
11

Mam skrypt, który słucha serwera Jabber i odpowiednio reaguje. Chociaż to nie powinno się zatrzymywać, ostatniej nocy tak się stało. Teraz chcę uruchomić zadanie cron co minutę, aby sprawdzić, czy skrypt jest uruchomiony, i uruchomić go, jeśli nie.Sprawdź, czy skrypt php nadal działa.

Pytanie brzmi: jak sprawdzić, czy dany skrypt nadal działa?

Niektóre rozwiązania zostały opublikowane here, ale te są dla Linuksa, a ja szukam rozwiązania Windows. Masz jakieś pomysły? Dzięki.

Odpowiedz

4

Szybkie i brudne obejście może spowodować, że skrypt zaktualizuje wiersz w bazie danych z kolumną z datą ustawioną na CURRENT_TIMESTAMP. Sprawdź drugi skrypt crona, jeśli znacznik czasu tego wiersza jest aktualny.

+0

mogę użyć tego obejścia w ostateczności. Czy istnieje jakiś skrypt powłoki systemu Windows, który wykona zadanie? – Nirmal

+0

Skrypty powłoki Windows są mniej przyjazne dla użytkownika niż JCL, a to coś mówi, więc obawiam się, że nie mogę ci tam pomóc. Możesz spróbować spojrzeć na PowerShell, ponieważ wydaje się to przydatne. – Danten

0

Oto, co zwykle zrobić:

  1. utworzyć katalog status, np:/data/status/
  2. na mój skrypt, należy go sprawdzić, czy plik status istnieje
    1. jeśli to istnieje, skrypt wyjście
    2. jeśli nie istnieją, kontynuować proces

Istnieje jednak pewien problem: co zrobić, jeśli skrypt zginie i nie usunął pliku statusu?

Można dodać trochę zaoszczędzić sprawdzić tak:

  1. za każdą minutę, plików Status aktualizacji
  2. dla każdego startu cron, sprawdź czy plik status ostatniej aktualizacji np: 10 lub 30 minut temu (możemy założyć, że nasz skrypt crona to kostka) możemy zacząć od skryptu cron.
0

miałem ten sam problem i rozwiązał z tym kodem:

file_put_contents("status.txt","ping"); 

umieścić go wewnątrz pętli mojego skryptu

więc sprawdzić datę ostatniej modyfikacji pliku do sprawdzić, czy skrypt jest aktywny

aby nie przeciążać HD można zrobić coś takiego:

$i++ 
if($i%100 == 0) 
    file_put_contents("status.txt","ping"); 

to zapisze plik, gdy $ i == 100 lub 200 lub 300 itd ...

jest to obejście

+0

Jak to jest wydajniejsze niż aktualizowanie pola sygnatury czasowej w bazie danych? Myślę, że aktualizacja db jest lepsza, ponieważ ma swoje własne mechanizmy blokujące. Podczas gdy my możemy polegać na pliku, możemy skończyć się impasem. Proszę, popraw mnie jeśli się mylę. – Nirmal

+0

Mam wiele skryptów na moim notebooku.Aby uzyskać dostęp do mysql z mojego pulpitu, musiałbym zainstalować PHP. Staje się to niepotrzebne, gdy pracuję tylko z plikiem tekstowym. Ale każdy przypadek powinien być traktowany oddzielnie. – Leo