NGINX----应用----误删nginx.pid

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NGINX----应用----误删nginx.pid相关的知识,希望对你有一定的参考价值。

参考技术A 在测试的时候我想看nginx日志都记录了什么,但是测试虚拟机nginx已经运行了一段时间,日志记录了很多东西,所以我删除了nginx的logs目录下的所有文件。

发现报错了!

提示打开失败,没有这个文件或者目录。

我们看到报错中指向/usr/local/nginx/logs/nginx.pid这个文件,为什么指向这里?这里我们就需要打开配置文件,配置的上部我们看到:

这里的logs/nginx.pid相对我们nginx的安装目录,我把nginx安装在/usr/local/nginx目录下,那么整个pid文件绝对路径就是/usr/local/nginx/logs/nginx.pid

1.我们可以杀死所有nginx进程,运行命令:

2.如果报错:-bash: killall: 未找到命令,运行命令:

3.这时重启nginx就可以正常运行了:

刚刚nginx成功启动了,我们切换到/usr/local/nginx/logs目录下发现系统重新为我们生成了一个nginx.pid,我们查看这个文件:

我们发现nginx主进程的pid就是nginx.pid文件中的数值!,如果我们误删除nginx.pid,只需要创建nginx.conf配置文件中的pid文件,加入nginx主进程的pid数值,重启nginx就不会报错了,就可以正确运行了。

linux 误删nginx.conf文件恢复

当你不小心误删或者错误操作导致nginx.conf文件丢失,而且nginx处于在住运行的状态,在这种情况下我们就可以在内存中获取配置文件。

1.获取nginx进程pid

ps -ef | grep nginx

你会得到如下输出,找到master的pid

root     19812     1  0 7月14 ?       00:00:00 nginx: master process /usr/sbin/nginx
nginx    19813 19812  0 7月14 ?       00:00:26 nginx: worker process
nginx    19814 19812  0 7月14 ?       00:00:33 nginx: worker process
nginx    19815 19812  0 7月14 ?       00:01:15 nginx: worker process
nginx    19816 19812  0 7月14 ?       00:00:55 nginx: worker process
nginx    19817 19812  0 7月14 ?       00:00:04 nginx: cache manager process
root     26171 12446  0 12:56 pts/0    00:00:00 grep --color=auto nginx

如上所示,nginx的主要进程pid为19812

2.查找内存映射

安装gdb工具

yum install gdb -y

接下来我们需要检查进程正在使用哪些内存映射

cat /proc/19812/maps | grep heap
[root@loghub-server tmp]# cat /proc/19812/maps | grep heap
55e0e6760000-55e0e69c2000 rw-p 00000000 00:00 0                          [heap]

可以看到有2处地方,我们只需要关注heap部分。内存位于55e0e6760000-55e0e69c2000之间。

3.转储堆

然后需要转储堆

gdb -p 19812

你会得到一个(gdb)提示。现在在这个提示下使用我们之前记下的地址,地址前需要加0x

(gdb) dump memory /tmp/nginx-memory 0x55e0e6760000 0x55e0e69c2000

4.从转储中获取字符串数据

strings  /tmp/nginx-memory > /tmp/nginx-memory.str

5.查找 Nginx 配置

现在有了内存转储。大多数配置都会有http 一行,现在可以测试下/tmp/nginx-memory.str

grep -A 20 "http " /tmp/nginx-memory.str
[root@loghub-server tmp]# grep -A 50 "http " /tmp/nginx-memory.str 
http 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    #proxy_temp_path  /etc/nginx/temp_dir;
    #proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=1g;
    #proxy_cache_path /etc/nginx/cache_dir levels=1:2 keys_zone=imgcache:500m max_size=1g inactive=1d use_temp_path=off;
    proxy_cache_path /etc/nginx/conf.d/cache levels=1:2 keys_zone=my_zone:100m inactive=3600s max_size=1g;

自己复制出来或者修改下格式之类的,就可以了。

以上是关于NGINX----应用----误删nginx.pid的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置文件说明

linux 系统 /bin文件误删恢复

简单nginx配置基于域名的虚拟主机

linux 误删nginx.conf文件恢复

linux 误删nginx.conf文件恢复

linux 误删nginx.conf文件恢复