【问题标题】:Capistrano Restart ApacheCapistrano 重启 Apache
【发布时间】:2013-10-01 13:06:11
【问题描述】:

我正在使用 Capistrano 部署 PHP 应用程序。我正在尝试添加在 Apache 完成后重新启动但我的脚本挂起的功能(我猜是因为它失去了与 Web 服务器的连接)。有没有办法发送service httpd restart 命令并无需等待即可返回?这是我正在做的事情(相关部分)......

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 才能让它结束。有什么办法可以让这个不阻塞?

【问题讨论】:

    标签: php ruby capistrano


    【解决方案1】:

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

    一样通过 sudo 运行它
    run "#{sudo} service httpd restart"
    

    并且可能将 NOPASSWD:/sbin/service httpd* 添加到您的 sudoers 文件中。

    您可能想要覆盖重新启动而不是网络挂钩:

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

    另外,考虑在钩子后收紧你:

    在“deploy:restart”之后,“myapp:restart_webserver”

    【讨论】:

    • 我以 root 用户身份连接。我知道...皱眉...但部署访问受 IP 地址限制,所以还不错。我发现在命令末尾添加& 会让它继续......但服务器实际上并没有重新启动。所以不确定那里发生了什么。也许我需要深入研究进程分叉在 Ruby 中的工作原理:-/ P.S.我的 deploy.rb 在没有服务器重启位的情况下工作正常(并且已经持续了数周)。只是想进一步自动化一点。
    • 有没有想过只是重写重启?
    • 我试试看。
    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2016-04-11
    相关资源
    最近更新 更多