2013-10-01 98 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

我會試試看。 –