前提条件
确保当前nginx进程运行中
处理流程
处理过程
1. 确保nginx进程在运行
systemctl status nginx
ps -ef | grep nginx
2. 删除nginx日志文件
rm -f /var/log/nginx/access.log
3. lsof恢复删除的日志文件
# 查看进程
lsof | grep /var/log/nginx/access.log
可以看到,nginx主进程号,因为nginx进程没有退出,该文件描述符还未被释放,所以还是可以恢复的,仔细看行末文件名多了一个deleted被删除的标记
进入linux中一个管理所有进程的目录,/proc,找到对应的进程id目录(父亲进程id),进入其管理文件描述符的地方。比如nginx主进程号1439
cd /proc/1439/fd && ls -lh
看到的软连接文件5,就是对应的刚刚误删掉的access.log文件,使用cat命令恢复日志文件
# 恢复此文件描述符的数据,到日志文件即可完成文件恢复
cat 5 > /var/log/nginx/access.log
这里以nginx为例,仅供参考。