恢复误删除的Nginx日志


昨天遇到了一个面试题--如何恢复误删除的nginx日志,当时我也只是回答出了大概的思路和步骤。晚上抽时间模拟下误删除和恢复的场景。

首先大概了解下/proc目录(记得当时考试RHCA的时候,关于这个目录的题目着实不少)。Linux系统上的/proc目录是一种文件系统,即proc文件系统,它是一种伪文件系统。里面保存了当前系统内核运行状态的一些信息,可以查看到相关的系统硬件及当前正在运行进程的相关信息,也可以通过更改其中某些文件来改变内核的运行状态。/proc/PID 保存的就是当前正在运行的进程信息,PID为进程号,当进程结束后相关目录则会消失。

恢复nginx误删除的日志就要使用到/proc/PID下的某些文件,先来看下该目录下都有哪些内容:

恢复误删除的Nginx日志

简单列几个:

- attr  进程的属性
- cmdline 启动时执行的命令
- cwd 当前的工作目录,软链接
- environ 进程执行使用的环境变量
- fd 进程打开的所有文件,文件名为文件描述符,目录中的每个软链接都指向了进程实际打开的文件
- limits 进程的软硬限制
- cgroup 该进程的cgroup控制组信息
- status进程的运行状态信息

恢复nginx日志就是使用了fd下的某些文件描述符,因为里面每个软连接实际上都是指向了nginx运行的时候打开的文件,包括nginx的日志文件。
下边模拟下误删除并恢复日志的过程。

查看nginx的日志:

    [root@iZ2876x9bezZ ~]# ll /var/log/nginx/

    total 12

    -rw-r--r-- 1 root root 6991 Aug 12 12:48 access.log

    -rw-r--r-- 1 root root  760 Aug 12 11:44 error.log

删除日志:

恢复误删除的Nginx日志

查看nginx的进程号:

恢复误删除的Nginx日志

查看该进程文件描述符信息:

恢复误删除的Nginx日志


可以看到文件描述符为5的软链接所指向的文件已经被删除,这个就是需要我们恢复的日志文件。
查看文件内容:

恢复误删除的Nginx日志

可以看到整个日志内容,并且新增的日志内容也会增加到该文件描述符内。接下来可以将这些日志内容输出到一个文件内,然后执行nginx的reload操作,这样可以重新生成一个access.log文件,并且新的日志内容输出到该日志文件内。

更多Nginx相关教程见以下内容

CentOS 6.2实战部署Nginx+MySQL+PHP

使用Nginx搭建WEB服务器

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程

CentOS 6.3下Nginx性能调优

CentOS 6.3下配置Nginx加载ngx_pagespeed模块

CentOS 6.4安装配置Nginx+Pcre+php-fpm

Nginx安装配置使用详细笔记

Nginx日志过滤 使用ngx_log_if不记录特定日志

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址

相关内容