質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

1回答

3919閲覧

capistranoでrailsアプリをデプロイ中、unicorn:restartでkill exit status: 1エラー

TakashiOda

総合スコア34

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

1クリップ

投稿2019/01/18 10:33

capistranoでrailsアプリをAWSサーバーにデプロイする際、以下のエラーが発生しました。
お分かりになる方、何卒アドバイスいただければと思います。

環境
Ruby 2.6.0
Rails 5.2.0
Capistrano 3.11.0
AWS linux
Nginx
Unicorn

###発生しているエラー

$ bundle exec cap production deploy を実行すると、unicorn:restartの部分で以下のエラーが出ます。

00:56 unicorn:restart 01 kill -s USR2 $(< /var/www/donosake_app/shared/tmp/pids/unicorn.pid) 01 01 Usage: 01 kill [options] <pid|name> [...] 01 01 オプション:      (略) 01 01 For more details see kill(1). #<Thread:0x00007ffc03b9bae8@/Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true): Traceback (most recent call last): 10: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute' 9: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/backends/abstract.rb:29:in `run' 8: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/backends/abstract.rb:29:in `instance_exec' 7: from /Users/odatakashi/Web_Apps/donosake/lib/capistrano/tasks/unicorn.rb:51:in `block (3 levels) in <top (required)>' 6: from /Users/odatakashi/Web_Apps/donosake/lib/capistrano/tasks/unicorn.rb:22:in `reload_unicorn' 5: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/backends/abstract.rb:78:in `execute' 4: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/backends/abstract.rb:145:in `create_command_and_execute' 3: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/backends/abstract.rb:145:in `tap' 2: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/backends/abstract.rb:145:in `block in create_command_and_execute' 1: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/backends/netssh.rb:169:in `execute_command' /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/command.rb:99:in `exit_status=': kill exit status: 1 (SSHKit::Command::Failed) kill stdout: Nothing written kill stderr: Usage: kill [options] <pid|name> [...] オプション: (略) For more details see kill(1). 1: from /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute' /Users/odatakashi/Web_Apps/donosake/vendor/bundle/ruby/2.6.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as odatakashi@52.199.254.34: kill exit status: 1 (SSHKit::Runner::ExecuteError) kill stdout: Nothing written kill stderr: Usage: kill [options] <pid|name> [...] オプション: (略) For more details see kill(1). (Backtrace restricted to imported tasks) cap aborted! SSHKit::Runner::ExecuteError: Exception while executing as odatakashi@52.199.254.34: kill exit status: 1 kill stdout: Nothing written kill stderr: Usage: kill [options] <pid|name> [...] オプション: (略) For more details see kill(1). (以下略)

unicorn.pidをkillできないということは理解できますが、原因が分かりません。

###関係がありそうな箇所
[config/deploy.rb]

lock "3.11.0" set :application, "donosake_app" set :repo_url, "git@github.com:TakashiOda/donosake_app.git" set :branch, 'master' set :deploy_to, "/var/www/donosake_app" set :linked_files, fetch(:linked_files, []).push('config/settings.yml') set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system') set :linked_files, %w{config/master.key} set :unicorn_pid, "/var/www/donosake_app/shared/tmp/pids/unicorn.pid" set :keep_releases, 5 set :ssh_options, { user: "odatakashi", keys: %w(~/.ssh/DonoSake_Key.pem) } set :rbenv_ruby, '2.6.0' set :log_level, :debug namespace :deploy do desc 'Restart application' task :restart do invoke 'unicorn:restart' end desc 'Create database' task :db_create do on roles(:db) do |host| with rails_env: fetch(:rails_env) do within current_path do execute :bundle, :exec, :rake, 'db:create' end end end end desc 'Run seed' task :seed do on roles(:app) do with rails_env: fetch(:rails_env) do within current_path do execute :bundle, :exec, :rake, 'db:seed' end end end end after :publishing, :restart after :restart, :clear_cache do on roles(:web), in: :groups, limit: 3, wait: 10 do end end end

[lib/capistrano/tasks/unicorn.rb]

namespace :unicorn do task :environment do set :unicorn_pid, "/var/www/donosake_app/shared/tmp/pids/unicorn.pid" set :unicorn_config, "/var/www/current/config/unicorn/production.rb" end #unicornをスタートさせるメソッド def start_unicorn within current_path do execute :bundle, :exec, :unicorn, "-c #{fetch(:unicorn_config)} -E #{fetch(:rails_env)} -D" end end #unicornを停止させるメソッド def stop_unicorn execute :kill, "-s QUIT $(< #{fetch(:unicorn_pid)})" end #unicornを再起動するメソッド def reload_unicorn execute :kill, "-s USR2 $(< #{fetch(:unicorn_pid)})" end #unicronを強制終了するメソッド def force_stop_unicorn execute :kill, "$(< #{fetch(:unicorn_pid)})" end #unicornをスタートさせるtask desc "Start unicorn server" task start: :environment do on roles(:app) do start_unicorn end end #unicornを停止させるtask desc "Stop unicorn server gracefully" task stop: :environment do on roles(:app) do stop_unicorn end end #既にunicornが起動している場合再起動を、まだの場合起動を行うtask desc "Restart unicorn server gracefully" task restart: :environment do on roles(:app) do if test("[ -f #{fetch(:unicorn_pid)} ]") reload_unicorn else start_unicorn end end end #unicornを強制終了させるtask desc "Stop unicorn server immediately" task force_stop: :environment do on roles(:app) do force_stop_unicorn end end end

[config/unicorn/production.rb]

root = "/var/www/donosake_app/current" working_directory root pid "/var/www/donosake_app/shared/tmp/pids/unicorn.pid" stderr_path "#{root}/log/unicorn.log" stdout_path "#{root}/log/unicorn.log" listen "/var/www/donosake_app/current/tmp/sockets/unicorn.sock" timeout 30 #ホットデプロイをするかしないかを設定 preload_app true #fork前に行うことを定義。後述 before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin Process.kill "QUIT", File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end #fork後に行うことを定義。後述 after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end

###試したこと
サーバの/sharedに権限を与えたり、capistrano logを見ましたが、同じエラー内容しか書かれていません。また手動でプロセスをkillしましたが、それでも変わりません。

似たような質問(https://teratail.com/questions/147833)が過去にありましたが、その方法では解決しませんでした。

お手数ですが、ご助言よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsuand

2019/01/19 04:03

"SSHKit::Runner::ExecuteError" を検索してみたらどうでしょう?
TakashiOda

2019/01/19 15:46

Matsuandさま 理解が追いつかず申し訳ないのですが、それはGoogleでという意味ですか?それとも内部でエラーログのさらなる詳細を検索する方法があったりするのでしょうか?もしあれば教えてください。
matsuand

2019/01/19 22:28

Google で検索するという助言です。一般的には内部エラーログがあればそれも含みます。今の場合、内部エラーログが該当するかどうかは当方は承知していません。Google かエラーログか、どちらを調べるのか解釈できないとお考えになる前に、どちらでも良いから手当たり次第行動を起こして、あらゆる手を尽くして調べ倒してください。
TakashiOda

2019/01/20 03:48

ご回答ありがとうございます。 実は、わかる限りのエラーログに加え、Googleで英語も含めて3日間調べ尽くしたのですが、解決に至らなかったために質問を投稿しました。 もちろん初学者でかつ独学なので調べ方や、capistrano自体の仕組みを完全に理解できていないことも大きいことも、対処できない理由だと思われます。 それでもいまだに解決しないため、もし何かしらお分かりになられるのであればご教授ください。 よろしくお願いいたします。
matsuand

2019/01/20 04:51 編集

pid ファイルが /var/www/donosake_app/current 配下になく shared 配下ですが、これはアクセス権限的に問題ないですか? kill -s USR2 にエラーが出ていて、エラーの出方がいわゆる構文誤りです。"kill -s USR2" という文字面には誤りがありませんから、後は $(< /var/www/donosake_app/shared/tmp/pids/unicorn.pid) が怪しいとなります。怪しいとは、そのファイルが存在しない、ディレクトリが存在しない、それらは存在するがアクセスできない、といった理由が想像されます。
TakashiOda

2019/01/20 05:38

pidファイルはshered配下にあります。アクセス権的には問題ありませんでした。またkillコマンドの文面も誤りはありませんでした。 理由は分かりませんが、shared/tmp/pids/unicorn.pidを削除したところうまくいきました。昨日同じことをやってもうまく行かなかったのですが・・・ ですがアドバイスを元に良く考えたら、おっしゃる通り今回のエラーはkillコマンドの構文が間違っていることが原因ですよね。。 ですがその部分を何も変えないままうまく行ってしまいました。さらにわからなくなってしまいました。 デプロイ自体はうまく行ったのですが、なんだかモヤモヤします。 いずれにしても、killコマンドをはじめ、一連のコマンドの書き方や意味をもう少し深く知る必要があると気づかされました。コメントいただきましてありがとうございました。
matsuand

2019/01/20 06:20

とりあえず解決してなによりと思います。追記しますが pid ファイルが存在しなかったりアクセス権限がなかったりしたら、別のエラーになっているかもしれません。考えられる可能性として、pidファイルは存在するものの中身が空っぽ (process id が書かれていない) 場合です。空であれば kill 構文が成立しないことになります。ではなぜそうなったかは不明です。異常処理が発生したとしか思いつきません。
guest

回答1

0

問題自体の解決になっているのかは不明ですが、

/var/www/app/shared/tmp/pids/uniorn.pidのファイル自体を削除すると、デプロイ自体は完了できました。

ちなみに削除する前のunicorn.pidファイル内は空っぽでした。削除したからkillコマンドがkillする対象が無くなったため、「とりあえず」処理が通ったのか、削除することが必要条件だったのかは不明です。

原因がお分かりになる方、教えてください。

投稿2019/01/20 05:43

TakashiOda

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutaro_0529

2020/11/12 02:46

同じような問題で困っています。。。 /var/www/app/shared/tmp/pids/uniorn.pidのファイル自体はどうやって削除されたのでしょうか!? 教えていただけると助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問