【问题标题】:Vagrant - start apache at bootVagrant - 在启动时启动 apache
【发布时间】:2013-12-27 14:19:54
【问题描述】:

我刚刚创建了一个新盒子(基于ubuntu precise32),并安装了我自己的软件,一切正常,除了启动时不启动的 apache。

vagrant up之后,我每次都必须登录我的盒子并启动它。

我试图让它在启动时启动:

sudo update-rc.d apache2 defaults

但我明白了:

System start/stop links for /etc/init.d/apache2 already exist.

所以它应该开始... 这是我的 Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
    config.vm.define :stilogo do |stilogo_config|
        stilogo_config.vm.box = "precise32"
        stilogo_config.vm.box_url = "http://files.vagrantup.com/precise32.box"
        stilogo_config.ssh.forward_agent = true

        #Do alla macchina un IP statico
        #stilogo_config.vm.network :private_network, ip: "192.168.56.101"

        stilogo_config.vm.network :forwarded_port, guest: 80, host: 8888, auto_correct: true
        stilogo_config.vm.network :forwarded_port, guest: 3306, host: 8889, auto_correct: true
        stilogo_config.vm.network :forwarded_port, guest: 5432, host: 5433, auto_correct: true
        stilogo_config.vm.hostname = "stilogo"
        stilogo_config.vm.synced_folder "www", "/var/www", {:mount_options => ['dmode=777','fmode=777']}
        stilogo_config.vm.provision :shell, :inline => "echo \"Europe/Rome\" | sudo tee /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata"

        stilogo_config.vm.provider :virtualbox do |v|
            v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
            v.customize ["modifyvm", :id, "--memory", "512"]
        end

        #Installo il software che mi serve
        stilogo_config.vm.provision :puppet do |puppet|
            puppet.manifests_path = "puppet/manifests"
            puppet.manifest_file = "phpbase.pp"
            puppet.module_path = "puppet/modules"
            #puppet.options = "--verbose --debug"
        end
    end
end

这是 apache 安装:

class apache 
{      
    package 
    { 
        "apache2":
            ensure  => present,
            require => [Exec['apt-get update'], Package['php5'], Package['php5-dev'], Package['php5-cli']]
    }

    service 
    { 
        "apache2":
            ensure      => running,
            enable      => true,
            require     => Package['apache2'],
            subscribe   => [
                File["/etc/apache2/mods-enabled/rewrite.load"],
                File["/etc/apache2/sites-available/000-default.conf"],
                File["/etc/apache2/conf-enabled/phpmyadmin.conf"]
            ],
    }

    file 
    { 
        "/etc/apache2/mods-enabled/rewrite.load":
            ensure  => link,
            target  => "/etc/apache2/mods-available/rewrite.load",
            require => Package['apache2'],
    }

    file 
    { 
        "/etc/apache2/sites-available/000-default.conf":
            ensure  => present,
            owner => root, group => root,
            source  => "/vagrant/puppet/templates/vhost",
            require => Package['apache2'],
    }

    exec 
    { 
        'echo "ServerName localhost" | sudo tee /etc/apache2/conf-enabled/fqdn.conf':
            require => Package['apache2'],
    }
}

这是vagrant up 和(手动)apache start 之后的日志

[Fri Dec 27 15:26:33.220448 2013] [mpm_prefork:notice] [pid 1379] AH00169: caught SIGTERM, shutting down
PHP Warning:  Module 'memcached' already loaded in Unknown on line 0
[Fri Dec 27 15:27:55.750639 2013] [mpm_prefork:notice] [pid 1105] AH00163: Apache/2.4.6 (Ubuntu) PHP/5.5.7-1+sury.org~precise+1 configured -- resuming normal operations
[Fri Dec 27 15:27:55.750700 2013] [core:notice] [pid 1105] AH00094: Command line: '/usr/sbin/apache2'

我错过了什么?

【问题讨论】:

  • 如果您查看日志,它是否正在尝试启动并失败?或者甚至不尝试?
  • 我已经在问题中添加了日志
  • 请问您为什么要启动 apache,因为您将它作为在级别运行上定义的 puppet 服务?
  • 因为当我启动我的机器时我无法使用 apache,如果我尝试在我的浏览器中访问 `localhost:8888¡ 它说它无法联系服务器。如果我手动启动 apache 它可以工作,也许我遗漏了一些东西,或者我不太了解如何使用 vagrant 和 puppet...

标签: apache vagrant


【解决方案1】:

我希望您的 apache 配置以某种方式引用 vagrant 挂载的文件夹中的文件(在 /vagrant 目录中或由 config.vm.synced_folder 定义的文件中)。在启动时,这些文件夹还不能访问,因为 vagrant 启动机器后安装它们。

我在这里问了类似的问题:Apache fails to start on Vagrant。如果是这样的话,也许我在那里得到了答案。

【讨论】:

    【解决方案2】:

    先做:

    sudo update-rc.d -f apache2 remove
    sudo update-rc.d apache2 defaults
    

    正如 cocheese 指出的那样。

    检查您的运行级别:

    runlevel
    

    它应该是“N 2”。所以检查符号链接是否正确:

    cd /etc/rc2.d/ && ls -al *apache2*
    

    如果你的输出与此类似:

    lrwxrwxrwx 1 root root 17 Sep 18 22:34 S18apache2 -> ../init.d/apache2
    

    你很好。 “S”很重要,“18”在您的系统上可以更低或更高,具体取决于系统依赖性。

    如果你看到你的 apache2-init 脚本点击这个(用你的替换“18”):

    cat /etc/rc2.d/S18apache2
    

    你的 rc.d 没问题。

    如果您重新启动您的虚拟机(例如,通过“vagrant halt”和“vagrant up”)并且您的 apache2 仍未启动并运行,那么您在启动时确实会出现错误。

    只需将其添加到您的 vagrantfile 即可离开无头模式并查看 gui:

    config.vm.provider :virtualbox do |vb|
      vb.gui = true
    end
    

    或者安装 bootlogd 以在您的 vm 启动时将服务消息记录到 /var/log/boot。

    apt-get install bootlogd
    

    有一个:

    cat /var/log/boot 
    

    你可能会看到你的 apache2 像这样失败:

    [...]
    Thu Sep 18 23:16:12 2014: [....] Starting web server: apache2Warning: DocumentRoot [/vagrant/public] does not exist
    Thu Sep 18 23:16:12 2014: Action 'start' failed.
    Thu Sep 18 23:16:12 2014: The Apache error log may have more information.
    [...]
    

    您可以按照 Ruslan Bes 的建议来解决该问题(他的帖子中的链接)。

    在您的 vagrantfile 中像这样修复症状:

    config.vm.provision "shell", inline: "service apache2 restart", run: "always"
    

    或者让你的虚拟机重新响应 vagrant mount 事件: a) 使用新贵包装脚本 b) 使用 udev 规则

    http://razius.com/articles/launching-services-after-vagrant-mount/

    或者您将您的虚拟主机更改为进入运行级别 2 时存在的目录。然后将 /vagrant 作为 vagrantfile 中的内联 shell 挂载到您的 vm 上的该目录。

    【讨论】:

    • 感谢您花时间解释步骤以找出重新加载后 apache 未运行的原因。我尝试使用引导日志和 gui 模式,但没有看到任何错误。 apache只是在启动后没有运行。我的 /etc/rc2.d/ 和你描述的一样。
    • 好的,如果没有错误,那么 apache 应该正在运行。请确认它正在运行:ps aux | grep 阿帕奇。如果未列出,则日志中肯定有错误 - 请重新检查。如果列出来。检查它是否在端口 80 上可用:netstat -an | grep 80。如果它不在端口 80 下,apache 可能会在启动时加载不同的配置,可能使用不同的端口。检查你的配置。
    【解决方案3】:

    也许这会有所帮助

    1. sudo update-rc.d -f apache2 删除
    2. sudo update-rc.d apache2 默认值

    然后重启

    【讨论】:

      【解决方案4】:

      只需在要挂载的文件夹中创建文件 index.html

      file { "/var/www/symfony/index.html":
          source => "/vagrant/provision/templates/index.html",
          owner => "www-data", group => "www-data",
          backup => true,
      }
      

      这里/var/www/symfony/ 将与来自/vagrant 的文件夹一起挂载

      【讨论】:

        猜你喜欢
        • 2014-03-03
        • 2013-08-08
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多