Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sprawdzenie czy uruchomiony jest inny skrypt
Demoneos
post
Post #1





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 26.02.2008

Ostrzeżenie: (0%)
-----


Jak można sprawdzić w skrypcie A, czy uruchomiony jest inny skrypt B (może być uruchomiony np. przez crona)?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
achill
post
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 28.08.2009
Skąd: wertykalne przez większość dnia

Ostrzeżenie: (0%)
-----


najlepiej by było jakbyś podał jakiś przykład skryptu, który chcesz sprawdzić.

Ogolnie rzecz biorąc, mozna rozwiązać ten problem w trochę inny sposób - pewnie nie jest to w 100% to o co Ci chodzi ale prawidłowe wnioski same się nasuwają:

załózmy że skrypt B wykonuje kilka operacji, ktorych wynikiem jest nowa zmienna x.
zatem wystarczy , że sprawdzisz (za pomoca if/while isset itp) w lub przed skryptem A czy ta zmienna została zadeklarowana czy nie.
jesli skrypt A wykaże ze zmienna zoastala zadeklarowan to wniosek, że skrypt B sie wykonał.
jesli nie wykaże zmiennej, to skrypt B sie nie wykonał (oczywiście zakładając, że nie jest to wynikiem błedów)


Go to the top of the page
+Quote Post
batman
post
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Na początku swojego działania skrypt A tworzy plik/zapisuje coś do bazy, a na końcu to usuwa. Skrypt B sprawdza, czy istnieje plik/wpis w bazie. Jeśli nie, to znaczy, że A nie pracuje, jeśli tak, wręcz przeciwnie. Dobrą praktyką jest ustalenie jakiegoś timeoutu dla pliku/wpisu w bazie, by uniknąć sytuacji, w której po awarii skryptu A, skrypt B będzie otrzymywał informację, że A cały czas pracuje.
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@achill:
Pokaż może jak sprawdzić z poziomu skryptu A czy skrypt B zadeklarował jakąś zmienną. Chętnie bym to sobie zobaczył.

@batman:
A co w przypadku, gdy skrypt po drodze się wysypie i nie zdąży zdjąć założonej przez siebie "blokady"? Edit: Aj, nie doczytałem - wspominasz o timeoucie.

Ja to realizuję za pomocą zakładania blokad na pliki. Jeśli blokada jest założona to znaczy, że proces pracuje. W przypadku wysypania się skryptu z dowolnego powodu blokada samoczynnie się zdejmuje. Oto klasa Process:
  1. <?php
  2. /**
  3.  * Klasa monitorująca działanie procesu.
  4.  *
  5.  * @author Michał "phpion" Płonka
  6.  * @package Process
  7.  */
  8. class Process {
  9. /**
  10. * Plik, na podstawie którego określany jest status działania procesu.
  11. *
  12. * @var string
  13. */
  14. protected $file;
  15.  
  16. /**
  17. * Uchwyt pliku.
  18. *
  19. * @var resource
  20. */
  21. protected $handler = NULL;
  22.  
  23. /**
  24. * Konstruktor klasy.
  25. *
  26. * @param string $file Plik, na podstawie którego określany jest status działania procesu.
  27. */
  28. public function __construct($file) {
  29. $this->file = APPPATH.'process/'.(string)$file;
  30. $this->handler = fopen($this->file, 'w');
  31. }
  32.  
  33. /**
  34. * Rozpoczyna działanie procesu.
  35. *
  36. * Nakłada blokadę na plik.
  37. *
  38. */
  39. public function start() {
  40. if (is_null($this->handler)) {
  41. $this->handler = fopen($this->file, 'w');
  42. }
  43.  
  44. flock($this->handler, LOCK_EX + LOCK_NB);
  45. }
  46.  
  47. /**
  48. * Kończy działanie procesu.
  49. *
  50. * Zdejmuje blokadę z pliku.
  51. *
  52. */
  53. public function stop() {
  54. if (!is_null($this->handler) && is_resource($this->handler)) {
  55. flock($this->handler, LOCK_UN);
  56. fclose($this->handler);
  57. }
  58.  
  59. $this->handler = NULL;
  60. }
  61.  
  62. /**
  63. * Sprawdza czy proces jest uruchomiony.
  64. *
  65. * @return bool Zwraca TRUE gdy proces jest uruchomiony, FALSE w przeciwnym wypadku.
  66. */
  67. public function is_running() {
  68. return !flock($this->handler, LOCK_EX + LOCK_NB);
  69. }
  70.  
  71. const VERSION = '1.0';
  72. }

Klasa jest napisana pod Kohanę więc zmodyfikuj się konstruktor by przyjmował pełną ścieżkę, a nie tylko nazwę pliku. Have fun (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
achill
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 28.08.2009
Skąd: wertykalne przez większość dnia

Ostrzeżenie: (0%)
-----


w kwestii sprostowania phpionie

1) zaznaczyłem że sprawdzenie zmiennej nie da nam w 100% tego co chcemy ale pozwoli sprawdzić czy skrypt się wykonał (tu moj bład bo chodziło przeciez o te ktore się jeszcze wykonują).
2) mimo tej nieścislości zasada myslenia jest podobna i ja i batman i Ty próbowaliśmy sprawdzić coś co powstaje tylko gdy skrypt zostanie uruchomiony ( w tym punkcie chyba się ze mną zgodzisz, że zmienna ze skryptu B może byc dowodem na jego wykonanie)
3) "chciałbym to zobaczyć", owszem bez timeouta pewnie by to ładnie wyglądało - permanentne 'skrypt B działa' (IMG:style_emoticons/default/wink.gif) ale czy nie wolno próbować?
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Spoko, tylko że napisałeś, że chcesz to zrealizować za pomocą sprawdzenia w skrypcie B czy skrypt A zainicjował jakąś zmienną. Według mojej wiedzy nie ma możliwości odczytu zmiennych utworzonych przez inny (zupełnie odrębny) skrypt. Jedynym rozwiązaniem jest wykorzystanie jakiś współdzielonych zasobów (plik, baza danych). Dlatego napisałem, że chętnie bym zobaczył próbę odczytu zmiennej $x zadeklarowanej w skrypcie a.php przez skrypt b.php.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 12:43