在Capistrano配方中,检测是否安装了Apache,然后将其停止

时间:2013-10-19 15:56:41

标签: ruby-on-rails apache capistrano

使用Rails 3.2,Capistrano 2,我有以下nginx配方:

namespace :nginx do
  desc "Install latest stable release of nginx"
  task :install, roles: :web do
    run "#{sudo} add-apt-repository -y ppa:nginx/stable"
    run "#{sudo} apt-get -y update"
    run "#{sudo} apt-get -y install nginx"
    run "#{sudo} /etc/init.d/apache2 stop" # Stop Apache because we are using nginx, only for production
    start
  end
  after "deploy:install", "nginx:install"
end

这是从头开始设置我的VPS的一部分,你注意到我在启动nginx之前停止了Apache,因此不存在端口冲突。但这只适用于安装Apache的情况,如果有其他操作系统没有安装Apache,那么这个部署配方会抛出错误,试图阻止不存在的Apache。

如何改进此脚本?感谢。

2 个答案:

答案 0 :(得分:0)

您可以将命令更改为

run "#{sudo} pkill -9 apache"

如果您使用的是任何监控工具,例如monitgod,那么他们可能会尝试再次启动Apache。在这种情况下,请使用

run "#{sudo} netstat -tulpn | grep ':80 ' && /etc/init.d/apache2 stop"

检查是否有任何进程(不仅仅是apache)正在侦听端口80,然后发出stop apache(如果是

答案 1 :(得分:0)

如果您只想忽略错误,如果找不到apache,您可以尝试用

替换命令
run "#{sudo} /etc/init.d/apache2 stop || true"