27歳未経験でエンジニア転職した元営業マン

アルバイトで半年間をドブに捨てた後、2ヶ月でエンジニア転職した記録

ローカルサーバー立ち上げができないときの対処法 `start_tcp_server': no acceptor (port is in use or requires root privileges)

こんにちは、tomohiroです。

いつものようにコンソールでrails sとやって、ローカルサーバーを立ち上げようとしましたが、 `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError) というエラーが出て、サーバーを立ち上げることができませんでした。

ただ、ググるとすぐに解決方法が分かったので共有します。

エラー内容

>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
Exiting
/home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:***:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
  from /home/***/.rvm/gems/ruby-2.1.9***:/gems/eventmachine-1.0.3/lib/***:526rb:***::in `start_server'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/backends/***:rb:***:in `connect'
    from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/backends/***:rb:55:in `block in start'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:187:in `call'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:187:in `run_machine'
    from /home/***/.rvm/gems/ruby-2.1.9***/gems/eventmachine-1.0.3/lib/***.rb:187:in `run'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/backends/***.rb:63:in `start'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/thin-1.5.1/lib/thin/***.rb:159:in `start'
    from /home/***/.rvm/gems/ruby-2.1.9***/gems/rack-1.4.5/lib/rack/handler/***.rb:13:in `run'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/rack-1.4.5/lib/rack/***.rb:268:in `start'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands/server.rb:70:in `start'
    from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands.rb:55:in `block in <top (required)>'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands.rb:50:in `tap'
  from /home/***/.rvm/gems/ruby-2.1.9***/gems/railties-3.2.12/lib/rails/commands.rb:50:in `<top (required)>'
    from script/rails:6:in `require'
  from script/rails:6:in `<main>'

エラーの原因

エラーの原因は、以前にローカルサーバーを立ち上げたプロセスが裏で起動しており、指定のポート番号が既に使用されていることでした。 サーバーを立ち上げ、exitせずにコンソールを閉じてしまうと、ポートが使用されたままの状態になり、指定されたポート番号でサーバーが立ち上がった状態となってしまっていたのです。 そのため、エラー文の中にあるように「Exiting 〜中略〜 port is in use or requires root privilege」という表示になっています。

解決コマンド

ps ax | grep railsで立ち上がっているrailsのプロセスを確認

kill -9 △△△ で裏で立ち上がってしまっていたプロセスをkill(※△△△の箇所はプロセスの番号を指定)

③ プロセスがkillされたのを確認し、rails s でサーバー起動

プロセスを確認した際の表示内容

[xxxxxx@localhost xxxxxx]$ ps ax | grep rails
 △△△△△△ ???    ??     0:00 /home/xxx/.rvm/rubies/ruby-2.1.9/bin/ruby script/rails s
 xxxxxx ???    ??     0:00 grep rails
[xxxxxx@localhost xxxxxx]$ kill -9 △△△△△△
[xxxxxx@localhost xxxxxx]$ ps ax | grep rails
 xxxxxx ???    ??     0:00 grep rails

今回のエラーの学び

サーバーを立ち上げられない場合、既に立ち上がっているプロセスを確認してみるということを学びました。 (これまで同様のエラーの際に、わざわざPCを再起動していたのがアホらしい、、)

参考サイト