2009-02-22 8 views
9

Próbuję uruchomić skrypt php na moim zdalnym wirtualnym serwerze prywatnym za pomocą wiersza poleceń. Proces śledzę to:Jak uruchomić skrypt php za pomocą wiersza poleceń (i zachować go po wylogowaniu)

  1. Zaloguj się do serwera za pomocą PuTTY
  2. W wierszu poleceń wpisz> php myScript.php

Skrypt działa dobrze. ALE PROBLEM polega na tym, że skrypt przestaje działać, gdy tylko zamknę okno konsoli PuTTY.

Potrzebuję skryptu, aby działał bez końca. Jak mogę to zrobić? Używam Debiana na serwerze.

Z góry dziękuję.

Odpowiedz

16

Wierzę, że Ben ma poprawną odpowiedź, a mianowicie użyj polecenia nohup. nohup oznacza nohangup i oznacza, że ​​twój program powinien zignorować sygnał zawieszenia, wygenerowany, gdy sesja szpachlowania zostanie rozłączona albo przez wylogowanie, albo z powodu przekroczenia limitu czasu.

Musisz mieć świadomość, że wynik polecenia zostanie dołączony do pliku w bieżącym katalogu o nazwie nohup.out (lub $ HOME/nohup.out, jeśli uprawnienia uniemożliwiają utworzenie nohup.out w bieżącym katalogu). Jeśli twój program generuje dużo danych wyjściowych, to ten plik może stać się bardzo duży, alternatywnie możesz użyć przekierowania powłoki, aby przekierować wyjście skryptu do innego pliku.

nohup php myscript.php >myscript.output 2>&1 & 

To polecenie uruchomić skrypt i wysłać wszystkie dane wyjściowe (standardowe i błąd) do pliku myscript.output który zostanie utworzony na nowo przy każdym uruchomieniu programu.

Ostateczny & powoduje, że skrypt działa w tle, dzięki czemu można wykonywać inne czynności podczas jego działania lub wylogowania.

9

Łatwym sposobem jest uruchomić go chociaż nohup:

nohup php myScript.php & 
+1

Należy pamiętać, że skrypt nie uruchomi się automatycznie po zakończeniu. –

4

Jeśli uruchomić polecenie php w screen, odłączyć screen, to nie zakończy się po zamknięciu konsoli.

Ekran jest multiplekserem terminali, który pozwala zarządzać wieloma procesami za pośrednictwem jednego fizycznego terminala. Każdy proces otrzymuje własne okno wirtualne i można odbijać się pomiędzy wirtualnymi oknami, które wchodzą w interakcje z każdym procesem. Procesy zarządzane przez ekran są kontynuowane, gdy ich okno nie jest aktywne.

+0

Zrobiłem to samo, co powiedziałeś, ale obecnie nie wiem, dlaczego mój skrypt zatrzymuje wykonywanie na ekranie. Gdy wyjdę z ekranu i ponownie go wyświetlę, to działa dobrze, więc masz pojęcie, co jest głównym powodem tego –

Powiązane problemy