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其他来源将我指向
nohup
,redirection
和pty => 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