Node / Express: EADDRINUSE, adres już używany - Kill server

Mam prosty serwer działający w node.js using connect:

var server = require('connect').createServer();
//actions...
server.listen(3000);

W moim kodzie mam rzeczywiste manipulatory, ale to jest podstawowa idea. Problem, który ciągle mam to

EADDRINUSE, Address already in use

Otrzymuję ten błąd podczas ponownego uruchomienia mojej aplikacji po wcześniejszej awarii lub błędach. Ponieważ nie otwieram nowej instancji terminala, zamykam proces za pomocą ctr + z.

Jestem całkiem pewien, że wszystko, co muszę zrobić, to zamknąć serwer lub połączenie. Próbowałem dzwonić server.close() w process.on('exit', ...); bez szczęście.

 264
Author: Skawful, 2010-11-02

28 answers

process.on('exit', ..) nie jest wywoływany, jeśli proces ulegnie awarii lub zostanie zabity. Jest wywoływana dopiero po zakończeniu pętli event, a ponieważ server.close() rodzaj Kończy pętlę zdarzeń (wciąż musi czekać na aktualnie uruchomione stosy tu i ówdzie) nie ma sensu umieszczać tego wewnątrz zdarzenia wyjścia...

Na crash, do process.on('uncaughtException', ..) i na kill do process.on('SIGTERM', ..)

To powiedziawszy, SIGTERM (domyślny sygnał kill) pozwala aplikacji oczyścić, podczas gdy SIGKILL (natychmiastowe zakończenie) nie pozwoli aplikacji zrobić nic.

 100
Author: Tor Valamo,
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
2010-11-03 11:05:15

Możesz również przejść trasę wiersza poleceń:

ps aux | grep node

Aby uzyskać identyfikatory procesów.

Wtedy:

kill -9 PID

Wykonanie -9 przy kill wysyła SIGKILL (zamiast SIGTERM). SIGTERM był dla mnie czasem ignorowany przez node.

 363
Author: djburdick,
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
2010-11-22 16:36:36

Znalazłem dla siebie najszybszy sposób rozwiązania tego było:

killall node
 168
Author: captainclam,
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-03-26 02:28:56

[1]}trafiłem to na moim laptopie z win8. to zadziałało.

Uruchom cmd.exe jako "Administrator":
C:\Windows\System32>taskkill /F /IM node.exe
SUCCESS: The process "node.exe" with PID 11008 has been terminated.
 91
Author: Sushil,
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-05-05 06:07:51

Po pierwsze, chciałbyś wiedzieć, który proces używa port 3000

sudo lsof -i :3000

Wyświetli listę wszystkichPID nasłuchujących na tym porcie, gdy już posiadaszPID , możesz zakończyć ją następującym kodem:

kill -9 {PID}
 65
Author: Mina Gabriel,
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-28 21:29:34

Sprawdź PID tj. id procesu uruchomionego na porcie 3000 za pomocą poniższego polecenia:

lsof -i tcp:3000

Wyświetli coś w następujący sposób:

COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF NODE NAME
node     5805  xyz    12u  IPv6  63135    0t0     TCP  *:3000 (LISTEN)

Teraz Zabij proces używając :

kill -9 5805
 24
Author: Ayan,
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-11-17 06:06:59

Jesteś na Linuksie czy Windowsie? If na Linuksie wpisz: ps i sprawdź PID procesu węzła.

Then, sudo kill PID

EDIT: Dla Windows:

Użyj tasklist, aby wyświetlić listę uruchomionych procesów:

tasklist /O

A następnie Zabij proces węzła w ten sposób (PID uzyskany z polecenia tasklist):

taskkill /pid PID

 17
Author: Shripad Krishna,
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-03-19 18:21:06

Znalazłem to rozwiązanie, spróbuj

  pkill node
 16
Author: alicanozkara,
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-12-25 10:21:06

Miałem ten błąd raz i wziąłem wiele podejść tutaj.

Mój problem polegał na tym, że miałem dwa app.listen(3000); połączenia w tej samej aplikacji.skrypt js. pierwsza aplikacja.listen ()

Innym użytecznym poleceniem, na które natrafiłem, które pomogło mi debugować, było sudo fuser -k 3000/tcp, które zabije wszelkie nieuczciwe procesy, które mogłeś uruchomić (niektóre procesy mogą się zrestartować, np. jeśli są uruchamiane z forever.js, ale mi się przydało).

 11
Author: Kit,
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-03-30 02:46:38

Dla twojej wiadomości, możesz zabić proces jednym poleceniem sudo fuser -k 3000/tcp. Można to zrobić dla wszystkich innych portów, takich jak 8000, 8080 lub 9000, które są powszechnie używane do rozwoju.

 8
Author: Dat TT,
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-02 03:28:34

Użytkownicy PowerShell:

Węzeł Taskkill /im.exe / F

 6
Author: var foobar,
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-05-31 20:58:38

Jeśli używasz Maca lub Linuksa możesz spróbować tego polecenia na terminal

 killall node
 6
Author: Adeojo Emmanuel IMM,
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-04-21 07:09:02

Na Linuksie.

Dodaj funkcję do ~/.bashrc:

function killTcpListen () {
  kill -9 $(lsof -sTCP:LISTEN -i:$1 -t)
}

Ciągnij zmiany: source ~/.bashrc

I użyj go: killTcpListen 3000

 5
Author: rofrol,
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-10-12 21:27:46

Możesz użyć hot-node, aby zapobiec awarii serwera/ błędom czasu pracy. Hot-node automatycznie uruchamia aplikację nodejs za każdym razem, gdy nastąpi zmiana w programie węzła [ źródło] / procesie [uruchamianie programu węzła].

Install hot-node using npm using the global option:

Npm install-g hotnode

 4
Author: touchStone,
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-14 09:16:48

Węzeł działa gdzieś w pamięci i ten port jest zablokowany. W systemie Windows Problem ten wystąpi, podobnie jak większość problemów z systemem Windows, można rozwiązać naciskając CTRL+ALT+DEL i / lub restart.

 3
Author: user1354017,
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-02-07 20:37:16

Z należytym szacunkiem dla wszystkich odpowiedzi w formularzu, chciałbym dodać punkt.

Znalazłem, że gdy kończę aplikację węzła na błąd za pomocą Ctrl + Z, bardzo następnym razem, gdy próbuję otworzyć go ma ten sam błąd EADDRINUSE.

Kiedy używam Ctrl + C, aby zakończyć aplikację węzła, następnym razem, gdy ją otworzyłem, zrobił to bez zaczepu.

Zmiana numeru portu na coś innego niż ten w błędzie rozwiązała problem.

 3
Author: Amal Augustine Jose,
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-15 14:12:04

Na wszelki wypadek sprawdź, czy przez pomyłkę dodałeś tę linię wielokrotnie ]}

app.listen(3000, function() {
  console.log('listening on 3000')
});

Powyższy kod jest dla express, ale po prostu sprawdź, czy próbujesz użyć tego samego portu dwa razy w kodzie.

 3
Author: Arun Killu,
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-07-01 07:00:22

Win10, Git bash v2.15, node v8.9.1, npm v5.5. 1

Miałem paczkę.skrypt json do uruchomienia węzła: "start": "node index.js"

Kiedykolwiek używałem tego, niezależnie od tego, czy zabiłem go za pomocą ctrl + c, napotkałem ten problem.

Jeśli po prostu uruchomiłem node index.js z Git bash zamiast npm run start i zabiłem ctrl + c, nigdy nie dostałem tego błędu.

Nie wiem dlaczego, ale pomyślałem, że to może komuś pomóc.
 3
Author: vapurrmaid,
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-12-06 23:16:32

Menedżer zadań (ctrl+alt+del) - >

Processes tab - >

Wybierz " węzeł.exe "proces i hit" koniec procesu "

 2
Author: idanuda,
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-17 13:06:06

Przyczyny tego problemu to:

  1. każda aplikacja może być uruchomiona na tym porcie, jak Skype.
  2. węzeł mógł ulec awarii i port mógł nie zostać uwolniony.
  3. być może próbowałeś uruchomić serwer więcej niż jeden. Aby rozwiązać ten problem, można zachować boolean, aby sprawdzić, czy serwer został uruchomiony, czy nie. Powinno być uruchamiane tylko wtedy, gdy wartość logiczna zwróci false lub undefined;
 1
Author: Vish,
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-08-30 09:26:44

Możesz używać więcej niż jednego serwera. Można je zamknąć i użyć jednego server.In Linux możesz użyć polecenia killall node.

 1
Author: ridvan,
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-11 09:03:01

Uważaj, że tak jak ja, nie masz innego pudełka DOS (lub podobnego) działającego, o którym zapomniałeś x)

To spowodowało dokładny błąd pokazany powyżej!

 0
Author: Dave,
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-09-09 13:46:17

Oznacza to ,że masz dwa serwery węzłów działające na tym samym porcie, jeśli jeden jest uruchomiony na porcie powiedzmy 3000 Zmień drugi na inny port powiedzmy 3001 i wszystko będzie działać dobrze

 0
Author: shadrack Mwangi,
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-11-16 08:06:40

Zastanawiam się, dlaczego nikt jeszcze nie wspomniał o tej możliwości:

  • Jeśli podasz {[0] } z łańcuchem znaków (celowo lub nie), który nie byłby poprawną reprezentacją numeru portu, może on zostać wewnętrznie przekonwertowany na numer portu -1, Ant wtedy silnik spróbuje połączyć się z tym portem -1, Co następnie spowoduje ten sam błąd EADDRINUSE, który z kolei może być nieco mylący i skręcić w złym kierunku dla wyszukiwania napraw błędów (hi, me XD).

Więc, debug Twój kod i sprawdź, co dokładnie przekazujesz funkcjom, zanim zaczniesz sprawdzać procesy, które używają Twojego portu .

 0
Author: ankhzet,
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-07-04 05:27:27

Ja też mam ten sam problem.

  • Zamknij wszystkie polecenia cmd lub Git bash w Menedżerze Zadań

If that didnt work restart your system

W innym scenariuszu musiałem zainstalować najnowszy węzeł i dać npm install jako administrator to działało.

 0
Author: Raphael,
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-12-20 10:24:51

Dla wszystkich, którzy przyszli do tego postu i próbowali wszystko może prawdopodobnie za pomocą nodemon lub forever, aby to zrobić. Na przykład, jeśli uruchomisz PORT=6060 Nodemon Może pojawić się ten sam błąd, że port 6060 jest już używany.

Jeśli tak jest, po prostu uruchom swój projekt bez nodemona, jeśli naprawdę potrzebujesz zdefiniować port podczas uruchamiania. Alternatywnie możesz zdefiniować port w swoim pliku, jeśli chcesz trzymać się nodemona.

For me I do this now PORT=6060 node app.js

 0
Author: Irfan Raza,
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-23 22:07:21

Oto jedna linijka (zamień 3000 na port lub zmienną konfiguracyjną):

kill $(lsof -t -i:3000)
 0
Author: floribon,
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-09-15 06:48:13

To polecenie wyświetla listę zadań związanych z "węzłem" i powoduje zakończenie każdego z nich.

kill -9  $( ps -ae | grep 'node' | awk '{print $1}')
 -3
Author: Martin Sarabia Aquino,
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-12-19 14:23:08