apache centos vagrant

Apache no se inicia después de la recarga de Vagrant



centos (4)

Mi nginx no se estaba iniciando en Vagrant reload o Vagrant up, así que esta es mi solución:

sudo cat > /etc/init/vagrant-mounted.conf << EOL # start services on vagrant mounted start on vagrant-mounted exec sudo service php5-fpm restart exec sudo service mysql restart exec sudo service memcached restart exec sudo service nginx restart exec sudo nginx EOL

Estoy tratando de configurar un entorno de desarrollo simple con Vagrant. El cuadro base (que creé) tiene CentOS 6.5 de 64 bits con Apache y MySQL.

El problema es que el servicio httpd no se inicia al arrancar después de volver a cargar la VM ( vagrant reload vagrant halt o vagrant halt ).

El problema solo ocurre cuando ejecuto un script de aprovisionamiento que altera el DocumentRoot y solo después de la primera vez que detengo el equipo.

Más información:

httpd está en chkconfig en los niveles 2, 3, 4 y 5

No hay errores escritos en error_log (en /etc/httpd/logs ).

Si entro en la máquina y comienzo el servicio manualmente, comienza sin problemas.

Tuve el mismo problema con otras cajas de CentOS (como el chef/centos-6.5 disponible en vagrantcloud.com), es por eso que creé una.

Otros servicios, como mysql, comienzan bien, por lo que es un problema específico de apache.

Reanudando

  • httpd siempre comienza en el primer arranque, incluso con el script de provisión (como después de la destrucción de vagabundo)
  • httpd siempre comienza cuando no ejecuto un script de provisión (pero lo necesito para configurar DocumentRoot)
  • httpd no se inicia después del primer alto, con un script de aprovisionamiento que estropea DocumentRoot (no estoy seguro si ese es el problema).

Este es mi archivo Vagrant:

# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos64_lamp" config.vm.box_url = "<url>/centos64_lamp.box" config.vm.hostname = "machine.dev" config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.synced_folder ".", "/vagrant", owner: "root", group: "root" config.vm.provision :shell, :path => "vagrant_files/bootstrap.sh" end

Traté de crear la carpeta vagabunda con propietario / grupo root y apache . Mismo problema con ambos (como con el propietario vagrant ).

Estas son las secuencias de comandos de provisión (bootstrap.sh) que probé. Lo único que quiero que hagan es cambiar el DocumentRoot a la carpeta vagabunda. Ninguno funcionó.

Prueba 1

#!/usr/bin/env bash sudo rm -rf /var/www/html sudo ln -fs /vagrant/app/webroot /var/www/html

Prueba 2

#!/usr/bin/env bash sudo cp /vagrant/vagrant_files/httpd.conf /etc/httpd/conf sudo service httpd restart

El httpd.conf en el segundo intento es igual al predeterminado, a excepción de la ruta de DocumentRoot. Esta segunda alternativa me permite hacer un vagrant up --provision para forzar el reinicio del servicio, pero eso debería ser un paso innecesario.

¿Qué más puedo intentar resolver esto? Gracias.


Aparentemente, el problema se debió a que la carpeta vagabunda no se montó cuando Apache intenta comenzar. Aunque todavía no entiendo por qué no se produce ningún error.

Lo resolví creando un script Upstart (en la carpeta /etc/init ) para iniciar el servicio después de que vagrant monta su carpeta (emite un evento llamado vagrant-mounted )

Este es el script que utilicé (con el nombre de archivo httpd.conf pero no creo que sea necesario).

# start apache on vagrant mounted start on vagrant-mounted exec sudo service httpd start

Upstart puede hacer mucho más pero esto lo resuelve.


Confirmo que la solución anterior ^ funciona absolutamente. vagrant-mounted.conf un archivo llamado vagrant-mounted.conf dentro de /etc/init , que contiene:

start on vagrant-mounted exec sudo sh /etc/startup.sh

el guión de shell /etc/startup.sh ya había agregado, como medio para iniciar manualmente httpd, mysqld y sendmail, pero era necesario iniciar sesión vía vagrant ssh después de vagrant up hacerlo ... ahora es automático. ¡estupendo!


En primer lugar, compruebe si httpd supone que debe iniciarse para niveles de ejecución específicos (al menos 2-5) por (lo que hizo):

chkconfig | grep httpd

En ese caso, puede estar relacionado con que su DocumentRoot o su enlace simbólico apunta a la carpeta sincronizada Vagrant , por lo que aún no está disponible durante el inicio del servicio.

La solución alternativa es agregar el comando service start httpd al final de la secuencia de comandos de suministro de shell, por ejemplo:

service httpd status || service httpd start

para arreglarlo

Para obtener más solución a prueba de balas, agréguela a la función de captura (para el script de Bash), por ejemplo:

trap onerror 1 2 3 15 ERR #--- onerror() onerror() { service httpd status || service httpd start }

Esto puede no ser suficiente, por lo que para que comience en casos de detención y recuperación, debe ejecutar su shell como always en su Vagrantfile , por ejemplo:

config.vm.provision :shell, run: "always", :inline => "service httpd status || service httpd start"

o proporcionar una secuencia de comandos, por ejemplo:

config.vm.provision :shell, run: "always", path: "scripts/check_vm_services.sh"

Entonces, el script puede verse así:

#!/usr/bin/env bash # Script to re-check VM state. # Run each time when vagrant command is invoked. # Check if httpd service is running. echo Checking services... service httpd status || service httpd start

Alternativamente, compruebe: Lanzando servicios después del montaje Vagrant que usa el evento advenedizo que Vagrant emite cada vez que monta una carpeta sincronizada que se llama vagrant-mounted, para que podamos modificar el archivo de configuración advenedizo para servicios que dependen de la carpeta sincronizada Vagrant para escuchar y comenzar compruebe y reinicie los servicios después de que se emita el evento montado en vagabundo.