Vik*_*rón 11 linux shell capistrano ruby-on-rails background-process
capistrano任务
namespace :service do
desc "start daemontools (svscan/supervise/svscanboot)"
task :start, :roles => :app do
sudo "svscanboot&"
end
end
Run Code Online (Sandbox Code Playgroud)
现在这不起作用:svscanboot进程根本不运行.这帮助我找到sleep:https://github.com/defunkt/resque/issues/284
其他来源向我指出nohup,redirection和pty => true,所以我尝试了所有这些.
run "nohup svscanboot >/tmp/svscanboot.log 2>&1 &" # NO
run "(svscanboot&) && sleep 1" # NO
run "(nohup svscanboot&) && sleep 1" # YES!
Run Code Online (Sandbox Code Playgroud)
现在,任何人都可以向我解释为什么我需要睡眠声明和nohup有什么区别?对于记录,如果从用户shell运行,上述所有内容同样运行良好,问题仅出现在capistrano的上下文中.
谢谢
尝试分叉该进程,如下所述: 在 Ruby 中生成后台进程
你应该能够做这样的事情:
job1 = fork do
run "svscanboot"
end
Process.detach(job1)
Run Code Online (Sandbox Code Playgroud)
另外,请查看此: 使用 Capistrano 启动后台任务