2011-12-23 11 views
14

Mam plik JS uruchamiany przez node.js, więc normalnie uruchamiam okno terminala i wpisuję coś takiego jak node myfile.js i działa on przez cały dzień; zabawa.Plik węzła wywołującego js

Następnie, gdy chcę go ponownie uruchomić, wciskam control-c i to znika. Wtedy mogę ponownie uruchomić polecenie.

Teraz chciałbym to zrobić poprzez stronę internetową, aby moi użytkownicy mogli uruchamiać określone pliki JS, a także mogli je "restartować".

Więc dwa pytania o to:

  1. Czy to możliwe, a jeśli tak, to jak mam zacząć?
  2. Czy jest bezpieczny, a jeśli nie, czy można go zabezpieczyć?

podstawie swatkins response

próbowałem tego i nie ma nic

$output = exec("node -v"); 
echo $output; 

Potem próbowałem na moim komputerze lokalnym i to działało dobrze, co daje?

również ja nadal nie jestem pewien co do bezpieczeństwa i możliwością zatrzymania Skrypt

+0

Nie, '$ output' należy przekazać jako drugi parametr funkcji exec:' exec ("node -v", $ output); print_r ($ output); ' – swatkins

Odpowiedz

16

Zakładając, że jesteś na systemie operacyjnym UNIX:

można uruchomić poleceń powłoki poprzez exec() funkcja:

// in php file 
// to start the script 
exec("node myscript.js &", $output); 

$output staje się tablicą każdej linii wyjścia, dzięki czemu można zobaczyć, co id procesu. Następnie użyłbyś tego identyfikatora procesu do zniszczenia skryptu:

exec("kill " . $processid); 
+0

i jak mógłbym następnie zatrzymać ten skrypt? i czy to jest bezpieczne? także, skąd mam wiedzieć, czy działa? – mcgrailm

+0

zaktualizowałem moją odpowiedź - musisz uzyskać identyfikator procesu, więc uruchamiając 'myscript.js' w tle (przez dołączenie' & 'do polecenia), otrzymasz identyfikator procesu w tablicy wyjściowej. Prawdopodobnie będziesz potrzebował manipulować ciągami znaków, aby uzyskać rzeczywisty identyfikator, ale możesz go użyć do zabicia procesu. – swatkins

+0

to polecenie uruchamia skrypt, ale nie daje mi żadnej możliwości, dopóki nie zabiję procesu, a następnie dostarczy mi dane zapisane w console.log() – mcgrailm

2

Unikałbym jakiejkolwiek bezpośredniej interakcji z powłoką. Byłoby prawdopodobnie najbezpieczniejsze, aby rozwiązać to w ten sposób:

  • wdrożyć pewne ogólne „usługa” -script, który uruchamia obsługi węzła aplikacji i utrzymuje go w ruchu (coś jak https://github.com/isaacs/node-supervisor)
  • Zrób to , więc automatycznie uruchamia się ponownie po zmianach odpowiednich plików lub wpisie do bazy danych
  • Gdy użytkownik uruchamia ponowne uruchomienie, dodaj flagę (znacznik czasu?) do wpisu bazy danych lub pliku, który jest obserwowany przez skrypt ponownego uruchomienia. Następnie uruchomi ponownie plik node.js-app/script.
+3

Dlaczego nie miałbyś interakcji powłoki? Co jest nie tak z zaakceptowaną odpowiedzią? –

Powiązane problemy