2013-10-01 56 views
1

我正在使用Capistrano部署PHP应用程序。我试图添加重启Apache的能力,一旦它完成,但然后我的脚本挂起(我猜,因为它失去了从Web服务器的连接)。有没有办法发送service httpd restart命令并返回而无需等待?下面是我在做什么(相关部分)...Capistrano重新启动Apache

namespace :myapp do 

    task :restart_webserver do 

     #Show Start of Task 
     print "Restarting webserver..." 

     # Restart Web Server 
     run "service httpd restart" 

     # Show Green Check Mark on Completion 
     puts checkmark.gsub(/\\u[\da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }.green 

    end 

end 

after "deploy","myapp:restart_webserver" 

它挂在重新启动,然后我不得不Ctrl+C出脚本来让它结束。任何方式来使这个非阻塞?

回答

2

由于我无法添加评论,因此应用程序运行的用户是?如果您以root用户身份登录,则此命令将正常工作。否则,你将需要通过sudo像

run "#{sudo} service httpd restart" 

运行这个,可能添加NOPASSWD:/ sbin目录/服务的httpd *您sudoers文件。

您可能要重写重启,而不是网络挂接:

namespace :deploy do 

task :restart, :except => { :no_release => true } do 
    myapp.restart_webserver 
end 

end 

此外,挂钩后考虑收紧你:

后 “部署:重启”, “MYAPP:restart_webserver”

+1

我以root用户身份进行连接。我知道... ...皱起眉头......但部署访问是IP地址有限,所以它不是太糟糕。我发现将'&'添加到命令的末尾会让它继续......但服务器实际上不会重新启动。所以不知道那里发生了什么。也许我需要深入了解Ruby中的流程分叉如何工作: -/P.S.我的deploy.rb在没有服务器重启位的情况下工作正常(并且已经持续了数周)。只是试图进一步自动化。 –

+0

有没有想过只是重载重启? – Electrawn

+0

我会试试看。 –