Capistrano任务

namespace :service do
  desc "start daemontools (svscan/supervise/svscanboot)"
  task :start, :roles => :app do
    sudo "svscanboot&"
  end
end

现在这不起作用:svscanboot进程根本无法运行。
这帮助我找到了sleep:https://github.com/defunkt/resque/issues/284
其他来源将我指向nohupredirectionpty => true,因此我尝试了所有这些方法。
run "nohup svscanboot >/tmp/svscanboot.log 2>&1 &"   # NO
run "(svscanboot&) && sleep 1"                       # NO
run "(nohup svscanboot&) && sleep 1"                 # YES!

现在,有人可以向我解释为什么我需要 sleep 声明,并且nohup有什么区别吗?
从记录来看,如果从用户 shell 程序运行,以上所有功能同样运行良好,问题仅在于capistrano。

谢谢

最佳答案

尝试按以下说明 fork 该过程:Spawn a background process in Ruby

您应该能够执行以下操作:

job1 = fork do
  run "svscanboot"
end

Process.detach(job1)

同样,请检查以下内容:Starting background tasks with Capistrano

10-06 09:45