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

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

ただいまの
回答率

90.32%

capistranoのデプロイ中のunicorn:startの際に、SSHKit::Runner::ExecuteErrorが発生してしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,016

big2017

score 30

capistranoのデプロイをしていますが、途中のunicorn:startの際に表題のエラーが発生します。
お手数おかけしますが、何か助言をいただけますと幸いです。

エラー内容はkillコマンドの使用法を正しくしてくださいとあるのですが、誤っているとは思いません...

unicornのエラーだったので、
サーバーの再起動、unicornプロセスのkillなどは行いましたが、解決に至りませんでした。

$ bundle exec cap production deployの実行中

エラーログ
unicorn:start
      01 /home/user/.rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/app/fender/current/config/unicorn/production.rb -E deployment -D

    ✔ 01 user@123.4.43.5 6.596s
      unicorn restarting...
      02 kill -s USR2 `cat /var/www/app/fender/shared/tmp/pids/unicorn.pid`
      02
      02 Usage:
      02  kill [options] <pid|name> [...]
      02
      02 オプション:
      02  -a, --all              do not restrict the name-to-pid conversion to processes
      02                         with the same uid as the present process
      02  -s, --signal <sig>     send specified signal
      02  -q, --queue <sig>      use sigqueue(2) rather than kill(2)
      02  -p, --pid              print pids without signaling them
      02  -l, --list [=<signal>] list signal names, or convert one to a name
      02  -L, --table            list signal names and numbers
      02
      02  -h, --help     display this help and exit
      02  -V, --version  output version information and exit
      02
      02 For more details see kill(1).
#<Thread:0x00007f976fd0a878@/Users/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    1: from /Users/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
/Users/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.17.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as user@123.4.43.5: kill exit status: 1 (SSHKit::Runner::ExecuteError)
kill stdout: Usage:
 kill [options] <pid|name> [...]

For more details see kill(1).
kill stderr: Nothing written
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as nattu@118.27.9.161: kill exit status: 1
kill stdout: Usage:
 kill [options] <pid|name> [...]

エラーログをみる限りだと、
実行のコマンドの使用法(↓下に記載)が正常ではないということなのかと思いますが、

kill -s USR2 cat /var/www/app/fender/shared/tmp/pids/unicorn.pid

他の方のunicorn.capを検索しながらunicorn.capのkillコマンドを実行させているメソッド周辺などを確認しましたが、誤ってそうな箇所はありませんでした。
このエラーはkillコマンドの使用方法が誤っているのでしょうか?

関連しそうなファイルを載せます。

/capistrano/tasks/unicorn.cap 

namespace :unicorn do
  task :environment do
    # shared_path = "/var/www/app/fender/shared"
    # current_path = "/var/www/app/fender/current"
    set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"
    set :unicorn_config, "#{current_path}/config/unicorn/#{fetch(:rails_env)}.rb"
  end

  def start_unicorn
    # フォルダが存在した場合のみ実行する
    within current_path do
    execute :bundle, :exec, :unicorn, "-c #{fetch(:unicorn_config)} -E #{fetch(:rails_env)} -D"
    end
  end

  def stop_unicorn
    execute :kill, "-s QUIT $(< #{fetch(:unicorn_pid)})"
  end

  def reload_unicorn
    # バグる
    execute :kill, "-s USR2 $(< #{fetch(:unicorn_pid)})" ### エラーの該当箇所です。このコマンドが悪いのでしょうか?
  end

  def force_stop_unicorn
    execute :kill, "$(< #{fetch(:unicorn_pid)})"
  end

  desc "Start unicorn server"
  task :start => :environment do
    on roles(:app) do
      start_unicorn
    end
  end

  desc "Stop unicorn server gracefully"
  task :stop => :environment do
    on roles(:app) do
      stop_unicorn
    end
  end

  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

  desc "Stop unicorn server immediately"
  task :force_stop => :environment do
    on roles(:app) do
      force_stop_unicorn
    end
  end
end

config/unicorn/production.rb

# -*- coding: utf-8 -*-
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 20

# ホットデプロイをするか?
preload_app true # 更新時ダウンタイム無し
app_path = '/var/www/app/fender/current'
working_directory "#{app_path}"
app_shared_path = "#{app_path}/shared"


# nginxと連携するための設定
# リクエストを受け取る ポート番号を指定
listen "#{app_shared_path}/tmp/sockets/unicorn.sock" 

stdout_path "#{app_shared_path}/log/unicorn.stdout.log"
stderr_path "#{app_shared_path}/log/unicorn.stderr.log"

# PIDの管理ディレクトリ
pid "#{app_shared_path}/tmp/pids/unicorn.pid"


# ログの出力パス
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])


# フォーク前に行うことを定義
before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

# フォーク後に行うことを定義
after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

config/deploy.rb

# 共通の設定をconfig/deploy.rbで記述

# config valid for current version and patch releases of Capistrano
lock "~> 3.11.0"

# 基本設定
set :application, "fender"
set :repo_url, "git@github.com:NatsukiSugawara/fender.git" # デプロイ対象のリポジトリ
set :deploy_to, '/var/www/app/fender' # デプロイ先

set :branch, 'master' # ブランチを指定できる
# set :scm, :git
set :deploy_via, :remote_cache


set :log_level, :debug # capistranoの出力ログの制御
set :pty, true # sudoを使用するのに必要

# bundleインストール設定
set :bundle_binstubs, nil

# Shared に入るものを指定
set :linked_files, %w{config/database.yml config/secrets.yml} # シンボリックリンクを貼るファイル ->デプロイ対象としたくないファイルを記載
set :linked_dirs,  %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/assets} # sharedにシンボリックリンクを張るディレクトリ指定-> デプロイ対象としたくないディレクトリを記載

# Unicorn
set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"

# リリースフォルダをいくつまで保持するか?
set :keep_releases, 5
after 'deploy:publishing', 'deploy:restart'
namespace :deploy do

 desc 'Restart application'
  # アプリ再起動を行うタスク
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :mkdir, '-p', release_path.join('tmp')
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end
  # linked_files で使用するファイルをアップロードするタスク
  # deployが行われる前に実行する必要がある。
  desc 'upload important files'
  task :upload do
    # binding.pry
    on roles(:app) do |host|
      execute :mkdir, '-p', "#{shared_path}/config"
      upload!('config/database.yml',"#{shared_path}/config/database.yml")
      upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml")
    end
  end

  # webサーバー再起動時にキャッシュを削除する
  after :restart, :clear_cache do
   on roles(:web), in: :groups, limit: 3, wait: 10 do
    #Here we can do anything such as:
    within release_path do
      execute :rm, '-rf', release_path.join('tmp/cache')
    end
   end
  end
  # Flow の before, after のタイミングで上記タスクを実行
  before :started,   'deploy:upload'
  after  :finishing, 'deploy:cleanup'

  #unicorn 再起動タスク
  desc 'Restart application'
  task :restart do
    invoke 'unicorn:restart' # lib/capustrano/tasks/unicorn.cap 内処理を実行
  end
end

リモートサーバー内で
$ /usr/bin/env kill -s USR2 cat /var/www/app/fender/shared/tmp/pids/unicorn.pid
行いましたが、同様のエラーになります

Usage:
 kill [options] <pid|name> [...]

オプション:
 -a, --all              do not restrict the name-to-pid conversion to processes
                        with the same uid as the present process
 -s, --signal <sig>     send specified signal
 -q, --queue <sig>      use sigqueue(2) rather than kill(2)
 -p, --pid              print pids without signaling them
 -l, --list [=<signal>] list signal names, or convert one to a name
 -L, --table            list signal names and numbers

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see kill(1).

$ tail -f unicorn.log # ユニコーンログ

I, [2018-09-21T15:48:07.269858 #8546]  INFO -- : Refreshing Gem list
I, [2018-09-21T15:48:11.973895 #8546]  INFO -- : listening on addr=/var/www/app/fender/current/shared/tmp/sockets/unicorn.sock fd=11
I, [2018-09-21T15:48:12.000559 #8550]  INFO -- : worker=0 ready
I, [2018-09-21T15:48:12.002483 #8546]  INFO -- : master process ready
I, [2018-09-21T15:48:12.003035 #8553]  INFO -- : worker=1 ready
I, [2018-09-21T15:48:12.005866 #8557]  INFO -- : worker=2 ready

$ ps aux | grep unicorn #プロセスの確認(killはすでにしましたが、治りませんでした。)

user     3092  0.1  7.3 478076 139216 ?       Sl   16:23   0:05 unicorn master -c /var/www/app/fender/current/config/unicorn/production.rb -E deployment -D
user     3096  0.0  7.1 479064 133896 ?       Sl   16:23   0:00 unicorn worker[0] -c /var/www/app/fender/current/config/unicorn/production.rb -E deployment -D
user     3100  0.0  7.1 479080 133872 ?       Sl   16:23   0:00 unicorn worker[1] -c /var/www/app/fender/current/config/unicorn/production.rb -E deployment -D
user     3104  0.0  7.1 479080 133876 ?       Sl   16:23   0:00 unicorn worker[2] -c /var/www/app/fender/current/config/unicorn/production.rb -E deployment -D
user     3341  0.0  0.0 112720   980 pts/0    S+   17:23   0:00 grep --color=auto unicorn

長文で失礼しました。
何助言いただけますと幸いです。
すみませんが、何卒よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

なんらかの原因(そもそもない、権限が不足している など)で

`cat /var/www/app/fender/shared/tmp/pids/unicorn.pid`


でpidが表示されないのではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/26 00:23

    ご回答ありがとうございました。
    ご指摘の通り、ファイルがなかったということでした。.
    ひとまずデプロイを終えることができました!

    キャンセル

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

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る