Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Auto restart skryptu PHP
Forum PHP.pl > Forum > Przedszkole
sasiadstar
Witam
Skrypt który "piszę" w bólach ogólnie działa w szczególności na lokalu ale na serwerze co chwila napotykam różnego rodzaju problemy a jednym z nich jest czas życia skryptu.
W związku z tym moje pytanie jest takie, jak uruchomić skrypt przez jego własną instancję tj.
Uruchamiam skrypt np 10 sekund a potem chciałbym uruchomić go jeszcze raz a obecny proces ubić i tak w kółko aż do wykonania wszystkiego co miał zrobić?
Np takie coś
  1.  
  2. for($i=0;$i<count($liczba);$i++)
  3. {
  4. //kod
  5. if($i==10 && $i<count($liczba))
  6. {//uruchom mnie od nowa;
  7. sleep(1);
  8. //zakończ skrypt
  9. };
  10.  
  11.  
  12. }
  13.  

Tomplus
Poczytaj o rekurencji i wszystko Ci się wyjaśni smile.gif
http://phpedia.pl/wiki/Rekurencja


https://stackoverflow.com/questions/2648968...function-in-php
sasiadstar
To nie o to chodzi bo skrypt i tak po dokładnie 450 sekundach zostanie zabity przez serwer, Chodzi o wywołanie jego kolejnej instancji np skrypt.php musi po 400 sekundach uruchomić nowy proces skrypt.php a sam siebie zabić.
Pyton_000
cron?
sasiadstar
Coś więcej?
Pyton_000
Ustawiasz sobie crona co 5 min niech odpala skrypt, a w samym skrypcie ubijasz po 4 np.

Chociaż lepiej byś powiedział co ten skrypt robi
Tomplus
Tak jak mówi Python, zamiast uruchamiać skrypt w skrypcie smile.gif
To użyj CRON, czyli harmonogramu zadań serwera. https://www.wikiwand.com/pl/Cron

Możesz ustawić tak, że co minutę wywołuje skrypt PHP. Możesz nawet ustawić że co 10sekund będzie wykonywał się skrypt, ale nie zalecam.
sasiadstar
Skrypt domyślnie analizuje adresy url (czy serwer działa czy nie)
Własnie o to mi chodzi żeby skrypt uruchomić z Crona a potem żeby się sam "replikowal".
Zadanie może być wykonywane i przez parę godzin, więc trochę bym musiał tego dodać a też bez sensu jest żebym np ustawił przez 6 godzin co 5 minut bo jeżeli wszystko zrobi krócej to będzie działał bezczynnie. Może mu to zająć 30 minut a równie dobrze pół nocy.
Wolałbym go uruchamiać jako kolejna instancja tak żeby w momencie kiedy skończy przerabiać bazę danych nie chodził na darmo.
Skrypt ma działać tylko w nocy a nie cały czas.
Tomplus
To ustawiasz albo cron na okres czasu który ma pracować, albo w skrypcie ustawiasz warunek czasowy np. jeżeli 18:00 - 6:00 skrypt działa, else nic nie rób.
sasiadstar
Ok
Powiedzmy że pójdę tą drogą.
Czy tak będzie ok
godziny 0-6
minuty */5
Pyton_000
Przecież możesz skrypt odpalać nawet co 5 min, a w samym skrypcie sprawdzać czy:
- inny skrypt nadal nie pracuje, jeśli tak to exit
- jeśli inny nie pracuje to sprawdź czy jest coś do roboty
- jeśli jest coś do roboty to działaj
- jak nie ma nic do roboty to exit.

sasiadstar
No Ok więc Crone plus sprawdzanie czy skrypt jest uruchomiony jak nie to do roboty
To jeszcze mi podpowiedz jaka funkcja do tego służy (sprawdzająca czy skrypt jest uruchomiony czy nie.
viking
Zapisz informacje o pracy do pliku i kasuj po zakończeniu pracy.
sasiadstar
Strasznie tu kombinowane wszystko, ale podsunęliście mi mniej więcej jak to ma wyglądać, poszperałem trochę i daje gotowca prosto i przyjemnie bez udziwnień.
Tworzymy plik php i dodajemy do crona

  1.  
  2. <?php
  3. $output = shell_exec('ps -C php -f');
  4.  
  5. if (strpos($output, "usun_martwe_linki.php")===false) {
  6.  
  7. shell_exec('php usun_martwe_linki.php > /dev/null 2>&1 &');// To jest ten fragment o który mi chodziło shell_exec
  8. };
  9.  


Prawda jest taka że
  1. shell_exec('php usun_martwe_linki.php > /dev/null 2>&1 &');



to jest to o co mi chodzilo,czyli uruchomienie skryptu z poziomu skryptu
dodać tylko jakąś pętle i będzie pięknie chodzić.

Można zamknąć temat
Pyton_000
To teraz uruchom sobie np. 5x tak "subskrypt" i zobacz co się będzie działo. potem dodatkowo ubij proces główny.
poza tym shell_exec nie wszędzie jest dostępne (shared hostingi)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.