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.
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.
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
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]
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.
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
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ć
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.
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
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
Podczas tworzenia, zalecam użycie nodemon . Spowoduje to ponowne uruchomienie serwera za każdym razem, gdy zmieni się plik. Jak zauważyli inni, Forever {[2] } jest opcją, ale w produkcji wszystko zależy od platformy, z której korzystasz. Zazwyczaj będziesz chciał skorzystać z zalecanego przez system operacyjny sposobu utrzymywania Usług (np. http://www.freedesktop.org/wiki/Software/systemd/).
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
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
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.
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
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
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