serve not interpreting interpreta how files executing don does code php apache

not - ¿Puede PHP reiniciar Apache?



apache2 php 7 (13)

¿No le gustaría pasar una "recarga" en lugar de un "reinicio"?

Tengo un servidor local que necesita hacer cambios en un archivo de configuración de Apache de hosts virtuales y luego reiniciar apache para que la nueva configuración entre en vigencia.

¿PHP puede hacer esto? Probé passthru y exec pero no funcionaron. Tal vez el problema es que estoy tratando de reiniciar el proceso principal de PHP?

¡¡Gracias por cualquier ayuda!!


Asumiría que si su script tiene acceso al shell, podría usar la función exec() para ejecutar un comando que reinicie apache o el servidor.


Esto sorta viola la cadena de comando estándar ya que apache invoca a php, no al revés. Estoy en segundo lugar la sugerencia de cron. Simplemente configure un trabajo cron con privilegios suficientes para verificar los cambios en el archivo host y reinicie Apache si encuentra alguno.


He usado un script cron (escrito en PHP, no ejecutado desde el servidor web) para verificar que el servidor esté activo y reiniciar el servidor.

Sin embargo, no haría esto desde un proceso creado por el servidor, porque sabes que estás a punto de matar el proceso principal, lo que tiene malas implicaciones para el niño.

El método más simple sería tener un archivo / tmp / RESTART_APACHE que PHP pueda crear y que el script cron verifique. Si el script cron ve el archivo / tmp / RESTART_APACHE, reinicia adecuadamente Apache.

El uso de un script cron introducirá un retraso (hasta 60 segundos si lo ejecuta cada minuto), pero aparte de eso debería funcionar como lo desee.

Dependiendo de cómo pretendas usar esto, eso puede ser el truco.

(Probablemente desee utilizar un directorio diferente de / tmp / para establecer permisos y evitar que cualquiera en el servidor pueda crear el archivo).

EDITAR: Por favor, mira el comentario de Aaron H a esta publicación. Estoy de acuerdo con lo que dice: realmente debes tener cuidado de que la capacidad de reiniciar tu servidor web no sea un servicio generalmente disponible para el público.

Restrinja el acceso al sistema que puede desencadenar el reinicio; asegúrese de que el archivo que desencadena el reinicio tenga permisos restrictivos para que solo el proceso web pueda crear ese archivo y, en general, sea inteligente.


Para hacer esto necesitarás editar el archivo sudo y luego ejecutar el comando de reinicio que se usa en tu sistema, usando sudo por supuesto. Si proporciona detalles, podría decírselo, pero ¿tiene acceso para hacerlo? ¿Está alojado? Cron probablemente sería una mejor opción aquí.


Puedes intentar editar / etc / sudoers y darle a quien esté ejecutando los privelages del proceso de apache en tu script de inicio de apache ... pero esta pregunta me está volviendo loca en este momento. Tengo curiosidad por saber cómo y por qué ... si tratas de reiniciar apache a través de php ... algo me dice que, sea cual sea el objetivo que intentas alcanzar, probablemente lo estés haciendo de forma incorrecta. por favor publíquenos y cuéntenos qué sucedió, tengo mucha curiosidad sobre esto ahora.


Sería increíble si pudiera ser una recarga instantánea ... pero creo que podría esperar un minuto.


Tengo control total sobre el servidor y puedo hacer los cambios necesarios.


con shell_exec puedes (pero php debería ejecutarse como superusuario, algo que se puede realizar con suphp)


re a

  1. se ejecuta cada minuto, por lo que tiene la misma demora de los 60
  2. es activado por cron en la mayoría de los servidores, por lo que no será más rápido que usar cron
  3. pero evitaría que tu script tenga que iniciarse y verificar la existencia del archivo de bloqueo

en will poder hacer eso, no estoy seguro de si puede programar hasta el segundo, pero supongo que eso depende de la implementación


He hecho esto exactamente por eso. Sin embargo, fue únicamente para un entorno de desarrollo, para crear rápidamente un host virtual para nuestros desarrolladores bajo demanda. Funcionó muy bien hasta ahora.

Mi enfoque era crear un nuevo usuario en el sistema, otorgar a este usuario derechos de sudo para recargar apache y desde Apache-> PHP utilicé SSH para localhost con una clave autorizada sin contraseña para ese usuario, emitiendo el comando.

La razón de esto fue que no quería darle al usuario apache (generalmente www-data) el poder en general para recargarse. Llamé al nuevo usuario wwwctrl.

El comando que utilicé fue:

ssh -i /path/to/key-file wwwctrl@localhost sudo /etc/init.d/apache2 reload

Tuve que ejecutar este comando una vez manualmente como usuario de wwwctrl para tener la clave de host local que se agrega a ~ wwwctrl / .ssh / known_hosts.

Usé proc_open () para ver la ejecución del comando.

De hecho, estaba generando un lote de hosts virtuales para diferentes instalaciones de Apache en diferentes sistemas, así que en cada sistema tenía este usuario de wwwctrl para volver a cargar Apache, básicamente haciendo esto en "hosts foreach como host do ... wwwctrl @ host @".


Crearía un daemon para supervisar el directorio habilitado por sitios y reiniciar Apache cuando los archivos se agregan o modifican. Entonces no tiene que esperar hasta 60 segundos como con un trabajo cron.