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.
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.
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.
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
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.
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}
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
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
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
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).
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.
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
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
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
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
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.
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.
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.
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.
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 "
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:
- każda aplikacja może być uruchomiona na tym porcie, jak Skype.
- węzeł mógł ulec awarii i port mógł nie zostać uwolniony.
- 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;
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.
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!
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
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łądEADDRINUSE
, 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 .
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.
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
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)
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}')
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