【发布时间】:2012-06-04 23:08:57
【问题描述】:
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 的上下文中。
谢谢
【问题讨论】:
-
nohup确保您的命令在 shell 终止后收到SIGHUP信号时不会终止。不过,我也很好奇为什么 sleep 命令会有所作为。 -
睡眠也改变了我的世界。令人费解的是,为什么 Capistrano 如此简单的任务却如此困难。
-
我看到了同样的行为。并且想知道同样的事情。
标签: ruby-on-rails linux shell capistrano background-process