Na serwerze Debian zainstalowałem Node.js. Rozumiem, jak uruchomić aplikację z pakietu za pomocą tego wiersza polecenia:
node /srv/www/MyUserAccount/server/server.js
i dostać się na adres 50.51.52.53:8080
( adres IP i port).
Ale jak tylko zamknę kit, nie mogę już dotrzeć do adresu 50.51.52.53:8080
.
Jak sprawić, by aplikacja Node.js działała na stałe?
Jak możesz się domyślić, jestem początkującym w Linuksie i Node.js.
Odpowiedzi:
Chociaż inne odpowiedzi rozwiązują problem PO, wszystkie są przesadzone i nie wyjaśniają, dlaczego on lub ona doświadcza tego problemu.
Kluczem jest ta linia: „Zamykam kit, a potem nie mogę dotrzeć do adresu”
Kiedy jesteś zalogowany do swojego zdalnego hosta na Putty, rozpocząłeś proces linuksa SSH i wszystkie polecenia wpisane z tej sesji SSH będą wykonywane jako dzieci tego procesu.
Problem polega na tym, że po zamknięciu Putty wychodzisz z sesji SSH, która zabija ten proces i wszelkie aktywne procesy potomne. Kiedy zamykasz kit, nieumyślnie zabijasz serwer, ponieważ uruchomiłeś go na pierwszym planie . Aby uniknąć tego zachowania, uruchom serwer w tle , dołączając & do swojego polecenia:
Problemem jest tutaj brak wiedzy o systemie Linux, a nie pytanie o węzeł. Aby uzyskać więcej informacji, sprawdź: http://linuxconfig.org/understanding-foreground-and-background-linux-processes
AKTUALIZACJA:
Jak wspomnieli inni, serwer węzłów może nadal umrzeć przy wychodzeniu z terminala. Częstym problemem, z jakim się zetknąłem, jest to, że chociaż proces węzła działa w bg, jest on standardem, a stderr jest nadal wskazywany na terminalu. Oznacza to, że jeśli serwer węzła zapisze w pliku console.log lub console.error, otrzyma błąd zepsutej rury i wystąpi awaria. Można tego uniknąć, przesyłając dane wyjściowe procesu:
Jeśli problem będzie się powtarzał, powinieneś przyjrzeć się takim rzeczom, jak tmux lub nohup , które są jeszcze bardziej niezawodne niż rozwiązania specyficzne dla węzłów, ponieważ można ich używać do uruchamiania wszystkich typów procesów (baz danych, usług rejestrowania, innych języków).
Częstym błędem, który może spowodować zamknięcie serwera, jest to, że po uruchomieniu
nohup node your_path/server.js &
wystarczy zamknąć terminal Putty jednym kliknięciem. Zamiast tego powinieneś użyćexit
polecenia, wtedy serwer węzła będzie działał.źródło
&
usługi, to nadal się zamyka. (Właśnie testowany na Debianie Jesse)nohup node /srv/www/MyUserAccount/server/server.js &
nohup node myApp.js &
uruchomił aplikację na bg, ale umiera, gdy termin został zamknięty. Nie jestem pewien, dlaczego.exit
polecenia, aby wyjść z terminala.Możesz zainstalować na zawsze za pomocą npm:
Następnie uruchom aplikację za pomocą:
Lub jako usługa:
Forever ponownie uruchamia aplikację, gdy z jakiegoś powodu ulega awarii lub zatrzymuje się. Aby ograniczyć ponowne uruchomienie do 5, możesz użyć:
Aby wyświetlić listę wszystkich uruchomionych procesów:
Zanotuj liczbę całkowitą w nawiasach i użyj jej w następujący sposób, aby zatrzymać proces:
Ponowne uruchomienie uruchomionego procesu przebiega następująco:
Jeśli pracujesz nad plikiem aplikacji, możesz użyć tego
-w
parametru, aby automatycznie uruchamiać się ponownie po każdejserver.js
zmianie pliku:źródło
forever start <file>
forever server.js
aforever start server.js
? Wiem, że jest napisane „jako usługa”, ale co to znaczy?forever server.js
, uruchamia serwer. NaciśnięcieCtrl
+C
spowoduje zatrzymanie usługi. Jeśli wpiszeszforever start server.js
, uruchomi usługę, a nawet jeśli naciśnieszCtrl
+C
, pozostanie otwarty. Następnie możesz wykonać powyższe polecenia, aby zatrzymać / przejrzeć listę. Tego przynajmniej doświadczyłem.forever
Moduł (v0.15.3) jest podatny na Regular Expression atakami typu DoS i nie powinien być stosowany: github.com/foreverjs/forever/issues/960Możesz użyć PM2 , jest to menedżer procesów produkcyjnych dla aplikacji Node.js z wbudowanym modułem równoważenia obciążenia.
Zainstaluj PM2
Uruchom aplikację
Jeśli używasz ekspresowego, możesz uruchomić aplikację jak
Lista wszystkich uruchomionych procesów:
Wyświetli listę wszystkich procesów. Następnie możesz zatrzymać / uruchomić ponownie usługę, używając identyfikatora lub nazwy aplikacji za pomocą następującego polecenia.
Aby wyświetlić dzienniki
źródło
Polecam poszukać czegoś takiego jak Forever, aby zrestartować Węzeł w razie awarii i zająć się tym za Ciebie.
źródło
nohup
węzeł zakończy działanie po wyjściu z sesji ssh, jeśli uruchomisz ją w ten sposób (chyba że używasz czegoś takiego jak screen do tmux).nohup
. Byłoby wspaniale, gdybyśmy mogli rozwiązać to zamieszanie. Ale nie wiem od czego zacząć.nohup
. Przykład:nohup node app.js &
Jeśli chcesz zawsze uruchamiać aplikację węzła w terminalu, po prostu użyj ekranu.
Zainstaluj na Ubuntu / Debian:
Stosowanie:
ctrl + a
a następniectrl + d
zwolnićAby uzyskać, powraca:
Jeden ekran:
screen -r
Jeśli jest więcej niż jeden, możesz wyświetlić listę wszystkich ekranów za pomocą:
screen -ls
I wtedy:
screen -r pid_number
źródło
Możesz po prostu tego użyć
Dzięki temu aplikacja będzie działać i aby ją zamknąć, będziesz musiał ją zabić.
W tym celu możesz zainstalować,
htop
a następnie wyszukać węzeł, a następnie go zabićźródło
exit
polecenia). Jeśli użytkownik po prostu zamknie okno, może użyć innego sygnału niżSIGHUP
zakończenie procesu, a zatem węzeł i tak zostanie zamknięty.killall node
, który zabije wszystkie procesy węzłowe, w moim przypadku tylko jeden.Forever to bardzo dobry moduł do tego celu.
Zainstaluj
forever
, wpisując w wierszu poleceniaNastępnie użyj następującego polecenia, aby uruchomić skrypt node.js
Możesz ruszać. Dodatkowo możesz biegać
aby zobaczyć wszystkie uruchomione skrypty. Możesz zakończyć dowolny skrypt, pisząc
gdzie
[pid]
jest identyfikator procesu skryptu uzyskanego zlist
polecenia. Aby zatrzymać wszystkie skrypty, możesz wpisaćźródło
źródło
Instalacja
Możesz używać wieczności do ciągłego uruchamiania skryptów
do zatrzymania usługi
źródło
Oto dorobkiewicz rozwiązanie używam dla moich projektów:
Umieść w
/etc/init/node_app_daemon.conf
:Będzie to również obsługiwać odradzanie aplikacji w przypadku awarii. Porzuci próby odrodzenia twojej aplikacji, jeśli zawiesi się 3 lub więcej razy w mniej niż 15 sekund.
źródło
Podczas programowania zalecam używanie nodemon . Ponownie uruchomi serwer po każdej zmianie pliku. Jak zauważyli inni, Forever jest opcją, ale w produkcji wszystko zależy od używanej platformy. Zazwyczaj będziesz chciał skorzystać z zalecanego przez system operacyjny sposobu utrzymania usług (np. Http://www.freedesktop.org/wiki/Software/systemd/ ).
źródło
nodemon
uruchamia polecenie chrząknięcia, chyba że podasz plik JS serwera, więc używam go do uruchamiania mongo i węzła na zawsze / jednocześnieStwierdziłem, że na zawsze doskonale wykonuję tę pracę.
Zakładając, że masz już zainstalowaną npm, jeśli nie, po prostu zrób
Następnie zainstaluj na zawsze
Teraz możesz uruchomić to w ten sposób
https://codingweb.io/run-nodejs-application-background/
źródło
Najpierw zainstaluj pm2 na całym świecie
następnie zacznij
źródło
Innym sposobem jest utworzenie jednostki systemowej dla aplikacji. utwórz plik „XXX.service” w folderze „/ etc / systemd / system”, podobnie jak to:
Korzyścią jest to, że aplikacja będzie działać jako usługa, automatycznie uruchomi się ponownie, jeśli ulegnie awarii.
Do zarządzania nim możesz także użyć sytemctl:
systemctl start XXX
aby uruchomić usługę,systemctl stop XXX
zatrzymać ją isystemctl enable XXX
automatycznie uruchomić aplikację po uruchomieniu systemu.źródło
Mam nadzieję, że to Ci pomoże.
W wierszu polecenia zainstaluj na zawsze:
Utwórz przykładowy plik:
Możesz edytować plik i uzyskiwać wyniki bezpośrednio w przeglądarce.
Możesz użyć filezilla lub dowolnego edytora do edycji pliku. Uruchom to polecenie, aby uruchomić plik:
źródło
Nie trzeba instalować żadnego innego pakietu.
Uruchom to polecenie
server.js to plik serwera lub może to być api.js
Następnie naciśnij „ exit ”, aby zamknąć terminal
źródło
Polecam używać PM2, który jest menedżerem procesów dla aplikacji Node.js. PM2 zapewnia łatwy sposób zarządzania i demonizacji aplikacji (uruchamianie ich jako usługi).
odsyłacz ten link - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
źródło
pakiet na zawsze działał dla mnie, tylko jedna rzecz, zależy od głębokiej równości , więc jeśli miałeś problem z instalacją, taki jak:
Próbować:
zamiast.
źródło