显然,我不应该花费不眠之夜试图调试应用程序。我想重新启动我的 nginx 并发现它的配置文件是空的。我不记得截断它,但胖手指和减少注意力可能起到了作用。
我没有那个配置文件的备份。我知道我应该做到的。
对我有好处,当前的 nginx 守护进程仍在运行。有没有办法将其配置转储到稍后会理解的配置文件中?
kup*_*son 68
您需要安装 gdb 来转储正在运行的进程的内存区域。
# 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_*
Run Code Online (Sandbox Code Playgroud)
您应该得到类似“二进制文件 mem_086cb000 匹配项”的信息。在编辑器中打开此文件,搜索配置(例如“worker_connections”指令),复制并粘贴。利润!
更新:这种方法并不完全可靠。它基于 nginx 进程将读取配置并且稍后不会覆盖/重用该内存区域的假设。我想掌握 nginx 进程为我们提供了最好的机会。
hig*_*ita 29
这对这个请求没有帮助,但可能会帮助其他人出于同样的原因到达这里。较新的 nginx 版本有 -T 选项来转储从所有 nginx 配置文件读取的 nginx 配置,而不是从内存中读取:
nginx -T
这对于确认正在读取配置文件、与其他服务器进行比较或搜索配置很有用。
同样,这不会从正在运行的进程中转储配置,只会转储新进程将加载的内容。
| 归档时间: |
|
| 查看次数: |
55861 次 |
| 最近记录: |