Ruby on rails Sidekiq由Capistrano启动后神秘消失

Ruby on rails Sidekiq由Capistrano启动后神秘消失,ruby-on-rails,ruby,capistrano,sidekiq,Ruby On Rails,Ruby,Capistrano,Sidekiq,我正在努力使用自定义v2 capistrano任务远程启动sidekiq: namespace :sidekiq do desc "Start sidekiq" task :start do run "cd #{current_path} && bundle exec sidekiq --version" run "cd #{current_path} && bundle exec sidekiq --environment product

我正在努力使用自定义v2 capistrano任务远程启动sidekiq:

namespace :sidekiq do
  desc "Start sidekiq"
  task :start do
    run "cd #{current_path} && bundle exec sidekiq --version"
    run "cd #{current_path} && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && echo OK"
  end
end
输出:

  * 2018-01-05 11:40:51 executing `sidekiq:start'
  * executing "cd /home/deploy/applications/xxx/current && bundle exec sidekiq --version"
    servers: ["198.58.110.211"]
    [198.58.110.211] executing command
 ** [out :: 198.58.110.211] Sidekiq 5.0.5
 ** [out :: 198.58.110.211]
    command finished in 1424ms
  * executing "cd /home/deploy/applications/xxx/current && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && echo OK"
    servers: ["198.58.110.211"]
    [198.58.110.211] executing command
 ** [out :: 198.58.110.211] OK
    command finished in 1128ms
如第一次运行cmd所示,我可以确认我正确获取了环境rbenv&bundler。但意外的是,sidekiq任务启动并被遗忘:1个tmp/pids/sidekiq.pid被初始化,但进程不存在,2个logs/sidekiq.log被创建,但仅使用头:

# Logfile created on 2018-01-05 11:34:09 -0300 by logger.rb/56438
如果我移除-daemon开关,我会让进程完美地运行,但是当然capistrano部署任务永远不会结束,当我执行CTRL+C操作时,sidekiq就会关闭

如果我只是ssh到远程并执行替换当前路径的命令,显然它工作得很好

我尝试了几乎所有我能想象到的方法:不使用config.file,使用RAILS_ENV而不是-environment,等等

如&&echo OK所示,该命令没有返回错误

据我所知,Capistrano正在使用/bin/bash-login-c'cd/home/deploy/applications/microgestion/current&&bundle exec-sidekiq-environment-production-daemon-config/sidekiq.yml'来运行该命令

Ruby v2.3.3、Capistrano 2.15.5、Sidekiq 5.0.5、Rails 4.0.12

通过在末尾添加&&sleep 1解决了此问题,如下所述:


感谢@user3309314为我指明了正确的方向。

如果您使用普通Capistrano来监控Sidekiq,任何崩溃都会导致停机。不要这样做。您需要使用一个进程监视器,如果Sidekiq进程死亡,它将重新启动该进程。使用文件中说明的systemd、upstart和/或Foreman


您是否在CAP文件中设置了:pty,true?与此相关的问题。@user3309314是的,我有默认的运行选项[:pty]=true setted。。我想你搞定了,但问题是我很确定它在那里是因为什么。。没有解决办法?试着使用。也许会有帮助当然,我用monit来检查。但是在部署时,需要重新启动sidekiq进程来加载代码更新。Systemd和upstart是进程管理器。它们的存在是为了启动/停止关键服务。
  desc "Start sidekiq"
  task :start do
    run "cd #{current_path} && bundle exec sidekiq --environment production --daemon --config config/sidekiq.yml && sleep 1"
  end