Jak zrobić węzeł.aplikacja js działa na stałe?

Na serwerze Debiana zainstalowałem Node.js. Rozumiem, jak uruchomić aplikację z putty za pomocą tej linii poleceń:

node /srv/www/MyUserAccount/server/server.js

I dostać się do niego na adres 50.51.52.53:8080 (IP i port).

Ale jak tylko zamknę szpachlówkę, nie mogę już dotrzeć do adresu 50.51.52.53:8080.

Jak zrobić węzeł.aplikacja js działa na stałe?

Jak można się domyślić, jestem początkujący z Linuksem i Node.js.

Author: vqdave, 2012-10-03

15 answers

Chociaż pozostałe odpowiedzi rozwiązują problem OP, są przesadne i nie wyjaśniają, dlaczego on lub ona doświadcza tego problemu.

Kluczem jest ta linia, "zamykam putty, wtedy nie mogę dotrzeć do adresu"

Kiedy jesteś zalogowany do zdalnego hosta na Putty, uruchomiłeś proces SSH linux i wszystkie polecenia wpisane z tej sesji SSH będą wykonywane jako Dzieci tego procesu.

Twój problem polega na tym, że po zamknięciu Putty wychodzisz z SSH sesji, która zabija ten proces i wszystkie aktywne procesy potomne. Po zamknięciu putty nieumyślnie zabijasz serwer, ponieważ uruchomiłeś go w na pierwszym planie . Aby uniknąć tego zachowania uruchom serwer w tle dodając & do komendy:

node /srv/www/MyUserAccount/server/server.js &

Problemem jest brak wiedzy o Linuksie, a nie pytanie o node. Aby uzyskać więcej informacji, sprawdź: http://linuxconfig.org/understanding-foreground-and-background-linux-processes

Aktualizacja:

Jak już wspomnieli inni, serwer węzła może nadal umrzeć po wyjściu z terminala. Często spotykam się z tym, że mimo że proces węzła działa w bg, to jest to stdout i stderr jest nadal wskazywany na terminal. Oznacza to, że jeśli serwer węzła zapisuje do konsoli.log lub konsola.błąd otrzyma uszkodzony błąd rury i awarię. Można tego uniknąć poprzez Orurowanie wyjścia procesu:

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

Jeśli problem nadal występuje, powinieneś przyjrzeć się rzeczom takim jak tmux lub nohup , które są nadal bardziej wytrzymałe niż rozwiązania specyficzne dla węzłów, ponieważ mogą być używane do uruchamiania wszystkich typów procesów (bazy danych, usługi logowania, inne języki).

Częstym błędem, który może spowodować wyjście serwera, jest to, że po uruchomieniu nohup node your_path/server.js & po prostu zamykasz Terminal Putty za pomocą jednego kliknięcia. Powinieneś użyć polecenia exit zamiast tego twój serwer węzłów będzie uruchomiony.

 150
Author: DogNibbler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-01 14:39:48

Możesz zainstalować na zawsze używając npm Tak:

sudo npm install -g forever

A następnie uruchom aplikację z:

forever server.js

Lub jako usługa:

forever start server.js

Forever uruchamia ponownie aplikację, gdy z jakiegoś powodu ulegnie awarii lub zatrzyma się. Aby ograniczyć restart do 5 można użyć:

forever -m5 server.js

Aby wyświetlić listę wszystkich uruchomionych procesów:

forever list

Zwróć uwagę na liczbę całkowitą w nawiasach i użyj jej w następujący sposób, aby zatrzymać proces:

forever stop 0

Ponowne uruchomienie uruchomionego procesu idzie:

forever restart 0

Jeśli pracujesz nad plikiem aplikacji, możesz użyć parametru -w, aby automatycznie uruchamiać się ponownie za każdym razem, gdy zmieni się plik server.js:

forever -w server.js
 260
Author: N20,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-17 14:32:16

Możesz użyć PM2, jest to menedżer procesów produkcyjnych dla węzła.aplikacje js z wbudowanym load balancer.

Zainstaluj PM2

$ npm install pm2 -g

Uruchom aplikację

$ pm2 start app.js

Jeśli używasz express, możesz uruchomić aplikację jak

pm2 start ./bin/www --name="app"

Lista wszystkich uruchomionych procesów:

$ pm2 list

Wyświetli listę wszystkich procesów. Następnie możesz zatrzymać / ponownie uruchomić usługę, używając identyfikatora lub nazwy aplikacji za pomocą następującego polecenia.

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               

Aby wyświetlić logi

$ pm2 logs ['all'|app_name|app_id]
 52
Author: Vikash Rajpurohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-26 06:15:27

Polecam poszukać czegoś takiego jak Forever , aby zrestartować węzeł w przypadku awarii i zająć się daemonizowaniem tego za Ciebie.

 38
Author: Brad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-15 20:32:08

Jeśli chcesz po prostu uruchomić aplikację węzła w terminalu zawsze, po prostu użyj screen.

Zainstaluj na ubuntu / Debianie:

sudo apt-get install screen

Użycie:

$ screen
$ node /path/to/app.js

ctrl + a a następnie ctrl + d odrzucić

To get is back:

Jeden ekran: screen -r

Jeśli jest więcej niż jeden, możesz wyświetlić wszystkie ekrany za pomocą: screen -ls

A następnie: screen -r pid_number

 28
Author: film42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-26 03:05:58

Możesz po prostu użyć tego

nohup node /srv/www/MyUserAccount/server/server.js &

Spowoduje to, że aplikacja będzie działać i aby ją wyłączyć, będziesz musiał ją zabić.

W tym celu możesz zainstalować htop, a następnie wyszukać węzeł, a następnie go zabić

 18
Author: Rick Roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 05:04:08

Oto rozwiązanie upstart , którego używam do moich osobistych projektów:

Miejsce w /etc/init/node_app_daemon.conf:

description "Node.js Daemon"
author      "Adam Eberlin"

stop on shutdown

respawn
respawn limit 3 15

script
  export APP_HOME="/srv/www/MyUserAccount/server"
  cd $APP_HOME
  exec sudo -u user /usr/bin/node server.js
end script

To również obsłuży odradzanie aplikacji w przypadku jej awarii. Zrezygnuje z prób odrodzenia aplikacji, Jeśli ulegnie awarii 3 lub więcej razy w czasie krótszym niż 15 sekund.

 8
Author: Adam Eberlin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 03:00:11

Nohup działa sprawdziłem w AWS Ubunto {[7] } vm postępuj zgodnie z poprawnym syntax

ubuntu@ip-172-00-00-00:~/ms$ nohup node server.js &

Następnie naciśnij enter zobaczysz tę linię

ubuntu@ip-172-00-00-00:~/ms$ nohup: ignoring input and appending output to ‘nohup.out’

Następnie wpisz to

rm nohup.out

Tutaj wpisz opis obrazka

 8
Author: Adiii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-01 05:20:08

Forever jest bardzo dobrym modułem NodeJs do tego właśnie służy.

Zainstaluj forever wpisując w wierszu poleceń

$ npm install forever -g

Następnie użyj następującego polecenia, aby uruchomić węzeł.skrypt js

$ forever start /path/to/script.js
Możesz iść. Dodatkowo możesz uruchomić
$ forever list

Aby zobaczyć wszystkie uruchomione Skrypty. Możesz zakończyć dowolny skrypt wpisując

$ forever stop [pid]

Gdzie [pid] jest identyfikatorem procesu skryptu, który uzyskasz z polecenia list. Aby zatrzymać wszystkie skrypty, ty maj typ

$ forever stopall
 7
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 15:30:31
 6
Author: Olivier Lalonde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-01 23:20:37

/ Align = "left" /

Zakładając, że masz już zainstalowany npm, jeśli nie, po prostu zrób

sudo apt-get install npm

Then install forever

npm install forever --global

Teraz możesz go uruchomić w ten sposób

forever start app.js

Https://codingweb.io/run-nodejs-application-background/

 6
Author: erax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 12:52:06

Instalacja

$ [sudo] npm install forever -g

Możesz używać forever do ciągłego uruchamiania skryptów

forever start server.js

forever list

Do serwisu stop

forever stop server.js
 5
Author: Sudhir singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 12:06:07

Innym sposobem jest utworzenie jednostki systemowej dla Twojej aplikacji. Utwórz plik" XXX.service "" /etc/systemd/system " folder smilar do tego:

[Unit]
Description=swagger
After=network.target

[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

Zaletą jest to, że aplikacja będzie działać jako usługa, automatycznie uruchamia się ponownie, jeśli ulegnie awarii.

Możesz również użyć sytemctl do zarządzania nim:

systemctl start XXX aby uruchomić usługę, systemctl stop XXX, aby ją zatrzymać i systemctl enable XXX, aby automatycznie uruchomić aplikację po uruchomieniu systemu.

 2
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-12 23:24:36

Zalecam użycie PM2, który jest menedżerem procesów dla węzła.aplikacje js. PM2 umożliwia łatwe zarządzanie i demonizowanie aplikacji (uruchamianie ich jako usługi).

Poleć ten link - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

 1
Author: vishwajit chauhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-01 14:06:40

Mam nadzieję, że to ci pomoże.

W wierszu poleceń zainstaluj na zawsze:

npm install forever -g

Utwórz przykładowy plik:

sudo nano server.js 

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:

forever start --minUptime 1 --spinSleepTime 1000 -w server.js

Tutaj wpisz opis obrazka

 1
Author: ghanshyam nakiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-29 19:23:25