Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak sprawdzić czy skrypt jest wykonywany
Forum PHP.pl > Forum > PHP
pietrekk
witam,
uruchamiam skrypt php w konsoli. czy jest mozliwosc sprawdzic czy skrypt jest wlasnie wykonywany i jesli nie to go uruchomic? np. zeby w cronie sprawdzac czy jest uruchomiony a jak nie to uruchomic?

phpion
Stwórz sobie na serwerze jakiś plik (może być pusty, nie ma to znaczenia), który będzie jakby identyfikatorem procesu. Podczas uruchamiania zadania zakładaj blokadę na ten plik, a zwalniaj ją gdy kończysz zadanie. W przypadku gdy w międzyczasie skrypt się wysypie blokada zostanie automatycznie zdjęta. Sprawdzenie czy skrypt pracuje sprowadza się do sprawdzenia czy plik procesu ma założoną blokadę.

Poniżej masz przykładową klasę, której używam w swoich projektach:
  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 = (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. }
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.