¿Vaciar la configuración de nginx del proceso en ejecución?

Pregunta:

Aparentemente, no debería haber pasado la noche sin dormir tratando de depurar una aplicación. Quería reiniciar mi nginx y descubrí que su archivo de configuración está vacío. No recuerdo haberlo truncado, pero los dedos gordos y la atención reducida probablemente jugaron su papel.

No tengo una copia de seguridad de ese archivo de configuración. Sé que debería haberlo logrado.

Bien por mí, el demonio nginx actual todavía se está ejecutando. ¿Hay alguna forma de volcar su configuración en un archivo de configuración que comprenderá más adelante?

Respuesta:

Necesita un gdb instalado para volcar regiones de memoria del proceso en ejecución.

# Set pid of nginx master process here
pid=8192

# generate gdb commands from the process's memory mappings using awk
cat /proc/$pid/maps | awk '$6 !~ "^/" {split ($1,addrs,"-"); print "dump memory mem_" addrs[1] " 0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}' > gdb-commands

# use gdb with the -x option to dump these memory regions to mem_* files
gdb -p $pid -x gdb-commands

# look for some (any) nginx.conf text
grep worker_connections mem_*
grep server_name mem_*

Debería obtener algo como "El archivo binario mem_086cb000 coincide". Abra este archivo en el editor, busque config (por ejemplo, directiva "worker_connections"), copie y pegue. ¡Lucro!

Actualización: este método no es del todo confiable. Se basa en la suposición de que el proceso nginx leerá la configuración y no sobrescribirá / reutilizará esta área de memoria más adelante. El proceso maestro nginx nos da las mejores oportunidades para eso, supongo.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım