92 votes

Erreur de TCPServer : L'adresse est déjà utilisée - bind(2)

Jekyll fonctionnait bien pour moi il y a quelques semaines, mais tout à coup, il me donne l'erreur suivante :

TCPServer Error: Address already in use - bind(2)
INFO  WEBrick::HTTPServer#start: pid=7300 port=4000

 % lsof -i :4000
 <fetches nothing>

Même si rien n'est en cours d'exécution sur le port. Voici les détails :

 % jekyll --version
Jekyll 0.11.2
 % where jekyll
/home/bhaarat/.rvm/gems/ruby-1.9.2-p290/bin/jekyll
/usr/bin/jekyll
 % ruby --version
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
 % rvm --version
rvm 1.10.0 

Voici le résultat

 % jekyll --server
Configuration from /home/bhaarat/blog/omnipresent.github.com/_config.yml
Auto-regenerating enabled: /home/bhaarat/blog/omnipresent.github.com -> /home/bhaarat/blog/omnipresent.github.com/_site
[2012-04-21 13:46:40] regeneration: 38 files changed
[2012-04-21 13:46:40] INFO  WEBrick 1.3.1
[2012-04-21 13:46:40] INFO  ruby 1.9.2 (2011-07-09) [i686-linux]
[2012-04-21 13:46:40] WARN  TCPServer Error: Address already in use - bind(2)
[2012-04-21 13:46:40] INFO  WEBrick::HTTPServer#start: pid=7382 port=4000

Je sais que l'adresse n'est pas utilisée et que Jekyll est probablement en train de se casser pour une autre raison, mais je lance cette erreur. Quelles sont mes options ? J'ai également essayé de le réinstaller.

0 votes

Comment savez-vous exactement que l'adresse n'est pas utilisée ?

0 votes

J'essaie lsof -i :<port number> de plus, la même chose se produit sur une autre boîte

0 votes

Que se passe-t-il si vous spécifiez un autre port ?

233voto

Naoise Golden Points 2969

Tapez ceci dans votre terminal pour trouver le PID du processus qui utilise le port 3000 :

$ lsof -wni tcp:3000

Ensuite, utilisez le numéro de la colonne PID pour tuer le processus :

$ kill -9 PID

20 votes

A tous ceux qui lisent ceci, assurez-vous que dans la dernière commande, vous substituez PID avec le numéro réel que vous voyez sous le PID. par exemple, j'ai exécuté kill -9 11734

0 votes

Notez que le problème peut également être un avertissement inoffensif provenant d'un problème de configuration d'IPv6 : le serveur se lie d'abord à une adresse double pile IPv4+IPv6, puis il essaie également de se lier à une adresse uniquement IPv6 ; et cette dernière ne fonctionne pas parce que l'adresse IPv6 est déjà prise par la socket double pile précédente.

18voto

Fonzie Points 271

Je n'étais pas qualifié pour poster un commentaire. J'ai donc ajouté une nouvelle réponse.

J'ai rencontré ce problème sur Mac OS X 10.10.3. Et je n'avais jamais installé/utilisé Jekyll auparavant. Je n'ai pas réussi à démarrer le serveur Jekyll avec son numéro de port par défaut 4000. La raison en était que ce port était le même que celui utilisé par NoMachine. Avec

$ sudo lsof -wni tcp:4000

Remarque : L'exécution de cette commande sans sudo n'aura pas de sortie.

J'ai vu cette sortie :

COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nxd     449   nx    3u  IPv4 0x8d22************      0t0  TCP *:terabase (LISTEN)
nxd     449   nx    4u  IPv6 0x8d22************      0t0  TCP *:terabase (LISTEN)

Le port 4000 était occupé par nxd qui était le processus lancé par NoMachine. Et

$ sudo kill -9 449

ne fonctionnerait pas, car le processus nxd de NoMachine continuerait à redémarrer, avec un nouveau PID.

Par conséquent, je devais soit :

  • J'ai changé le port de mon serveur Jekyll dans le site. _config.yml à un autre épargné. J'ai ajouté la ligne ci-dessous à _config.yml et ça a marché.

    port: 3000 # change server port to 3000

o

  • Changer le port nxd par défaut de NoMachine, ou Désinstaller NoMachine

11voto

kevin Points 51

Ctrl-Z ne met pas fin à un programme, mais le suspend et l'envoie en arrière-plan. Vous pouvez reprendre le programme avec la commande "fg". Pour le terminer, utilisez Ctrl-C .

Le message d'erreur réel semble être faux et peut être ignoré. J'obtiens le même message d'erreur "adresse en cours d'utilisation" mais jekyll fonctionne bien de toute façon au port attendu.

0 votes

Je reçois également le message d'erreur, mais je peux faire fonctionner mon site hors :4000

3voto

wfwei Points 37

J'ai rencontré ce problème récemment.

J'ai essayé toutes les méthodes mentionnées ci-dessus, et j'ai même redémarré mon ordinateur, mais je n'ai toujours pas réussi à le résoudre !!! Puis j'ai supprimé le jekyll et installé une nouvelle version, cela a fonctionné.

gem uninstall jekyll & gem install jekyll (vous avez peut-être besoin du privilège de super utilisateur).

Si vous êtes vraiment ennuyé par des bugs similaires, cette méthode de sb vaut la peine d'être essayée...

0voto

harvey Points 299

Vérifiez que vous n'avez pas un autre terminal ouvert là où vous exécutez déjà un serveur. Si c'est le cas, faites un CTRL-C pour arrêter le serveur, et cela libérera le port/adresse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X