2009-01-08 19 views
15

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.¿Puede PHP reiniciar Apache?

¿Puede PHP 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!

Respuesta

1

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

1

Para hacer esto, necesitaría editar el archivo sudo y luego ejecutar el comando de reinicio que se usa en su 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í.

18

He utilizado 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 sabe que está 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 puede crear y que el script cron busca. 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 pretenda usar esto, eso puede hacer el truco.

(Es posible que desee utilizar un directorio diferente a/tmp/para establecer los permisos y prevenir cualquier persona en el servidor de ser capaz de crear el archivo.)

EDIT: Por favor, véase el comentario de Aaron H a este mensaje. 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.

+0

Es importante agregar que esta es una muy mala idea si el servicio (PHP) está disponible en el exterior ... Algo que reinicie sus servicios web solo debe ser utilizado por los administradores, de lo contrario, abre la puerta a un toda una serie de oportunidades para tener su servidor en peligro. –

+0

¿No dijo cómo se haría exactamente este reinicio? qué código debe ejecutarse –

+2

@Java PHP - si solo intenta volver a cargar la configuración, solo necesita ejecutar "apachectl graceful" (o "apache2ctl graceful") –

0

Esto sorta cosa viola la cadena de comando estándar ya que apache invoca php, y 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.

+0

Si bien este enlace puede responder a la pregunta, es mejor para incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/19038311) –

1

at será capaz de hacer eso, no está seguro de si puede programar hasta el segundo pero supongo que depende de la aplicación

+0

at se ejecuta normalmente desde cron, por lo que esto no será más rápido que ejecutar cron ¿o sí? –

13

He hecho esto para la cosa muy exactamente. 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, darle a este usuario derechos de sudo para recargar apache y desde Apache-> PHP Usé 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) la potencia en general para volver a cargarse.Llamé al nuevo usuario wwwctrl.

El comando que utilicé fue:

ssh -i /path/to/key-file [email protected] sudo /etc/init.d/apache2 reload 

que tenía que ejecutar este comando manualmente una vez que el usuario wwwctrl tener la clave de host local que se añade a ~ wwwctrl/.ssh/known_hosts.

Utilicé 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 recargar Apache, básicamente haciendo esto en "hosts foreach como host do ... wwwctrl @ anfitrió[email protected]".

1

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

Cuestiones relacionadas