2

我正在使用 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退出脚本才能结束。有什么方法可以使这个非阻塞?

4

1 回答 1

3

由于我无法添加评论,应用程序以什么用户身份运行?如果您以 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" 之后

于 2013-10-01T20:25:03.000 回答