LoginSignup
14
13

More than 3 years have passed since last update.

EC2でunicorn接続した際に`ArgumentError: Already running on PID〜`エラーになった時の対処法

Posted at

はじめに

EC2で次のようにunicorn接続を行った際に起こり、接続できなかったので、そのエラー理由と対処法を備忘録として残しておきます。

[ec2-user@ip-10-0-0-133 twitter_clone_2019]$ bundle exec unicorn_rails -E development -c config/unicorn/development.rb -D
master failed to start, check stderr log for details

このエラーは何か??

check stderr log for details(詳細はstderrlogを確認するように)とあるので調べてみると以下のような結果が出ました。ここで注目するのがAlready running on PID:17739となります。unicornは接続する度にプロセスIDが割り当てられます。そのため、このエラーは以前に行ったunicorn接続のプロセスが残っており、それが実行中のため再度接続できません、という意味です。

[ec2-user@ip-10-0-0-133 twitter_clone_2019]$ sudo vi log/unicorn.stderr.log
bundler: failed to load command: unicorn_rails (/var/www/twitter_clone_2019/vendor/bundle/ruby/2.6.0/bin/unicorn_rails)
ArgumentError: Already running on PID:17739 (or pid=/var/www/twitter_clone_2019/shared/tmp/pids/unicorn.pid is stale)
  /var/www/twitter_clone_2019/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:207:in `pid='
  /var/www/twitter_clone_2019/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:139:in `start'
  /var/www/twitter_clone_2019/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/bin/unicorn_rails:209:in `<top (required)>'
  /var/www/twitter_clone_2019/vendor/bundle/ruby/2.6.0/bin/unicorn_rails:23:in `load'
  /var/www/twitter_clone_2019/vendor/bundle/ruby/2.6.0/bin/unicorn_rails:23:in `<top (required)>'

エラー対処法

unicornを再起動させたり、停止させたい場合は、動作中のプロセスに対してkillというシグナルを送信することででプロセスを停止させることができます。ec2-user 17978等がプロセスになります。これらの動作中のプロセスを停止させた後、grepと書かれているプロセスのみ残っていればOKです。これで、unicorn接続を改めて行うことが可能となります。

[ec2-user@ip-10-0-0-133 twitter_clone_2019]$ ps aux | grep unicorn  #プロセスの確認
ec2-user 17978  5.4  7.3 776516 74064 ?        Sl   14:14   0:00 unicorn_rails master -E development -c config/unicorn/development.rb -D
ec2-user 17985  0.0  6.6 776516 66500 ?        Sl   14:14   0:00 unicorn_rails worker[0] -E development -c config/unicorn/development.rb -D
ec2-user 17986  0.0  6.6 776516 66500 ?        Sl   14:14   0:00 unicorn_rails worker[1] -E development -c config/unicorn/development.rb -D
ec2-user 18020  0.0  0.0 119484   896 pts/1    S+   14:14   0:00 grep --color=auto unicorn
[ec2-user@ip-10-0-0-133 twitter_clone_2019]$ kill 17978  #プロセスの停止
[ec2-user@ip-10-0-0-133 twitter_clone_2019]$ ps aux | grep unicorn #再度プロセスの確認
ec2-user 18023  0.0  0.0 119484   936 pts/1    S+   14:16   0:00 grep --color=auto unicorn 

上記の方法だと、毎回停止させるプロセス番号の確認が必要となりますが、以下の方法だと確認作業を省略することができます。-3は中止シグナルとなっており、バッククオート内で実行されているプロセスを停止させることができるコマンドです。

[ec2-user@ip-10-0-0-133 twitter_clone_2019]$ kill -3 `cat shared/tmp/pids/unicorn.pid`  #unicorn.pidがあるpathをバッククオートで囲む

参考資料

https://wa3.i-3-i.info/word11040.html
https://qiita.com/Coconew5/items/2f4ba976e58da9c1ec22
https://www.k-tanaka.net/unix/kill.php

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13