1.问题来源
现场反馈一个修改密码出错的问题,需查看一个服务名为baseserver的日志信息,之前日志存放在/data/baseserver*路径下,现登陆服务器后,发现该路径下没有任何baseserver相关的日志文件
[root@ecs-1343-0001 data]# vim /data/ba
tab健按不出来啦!!!
怎么办?客户现场急!!!为什么修改不了???
怎么办?大佬一直在催!!!怎么还没定位出来???
怎么办?我该怎么办???!!!无数个草泥马从前面奔腾而来。。。
2.过程
网上搜罗了一番关于日志恢复的方法,总算找到此神篇,此巨作。在此也感谢该作者,出处:https://www.jianshu.com/p/662293f12a47,谢谢!
3.操作
接下来 看我如何操作
3.1.ps faux查看服务的进程号
[root@ecs-1343-0001 ideal]# ps faux |grep baseserver
root 111214 0.0 0.0 112708 984 pts/1 S+ 08:20 0:00 \_ grep --color=auto baseserver
root 7649 0.0 0.0 115304 712 ? S 00:46 0:00 /bin/bash ./start_baseserver.sh
root 7664 0.0 0.1 808080 25192 ? Sl 00:46 0:02 \_ ./baseserver config
3.2.通过lsof带日志文件名可以查看具体是那个进程,进程号,节点等信息,如下图:
[root@ecs-1343-0001 ideal]# lsof |grep baseserver*
baseserve 7664 8360 root 3w REG 202,2 172818 168742652 /data/log/baseserver-7664-20200120004646.log (deleted)
baseserve 7664 8360 root 4u a_inode 0,10 0 8510 [eventpoll]
baseserve 7664 8360 root 5w REG 202,2 172818 168742652 /data/log/baseserver-7664-20200120004646.log (deleted)
baseserve 7664 8360 root 3w REG 202,2 172818 168742652 /data/log/baseserver-7664-20200120004646.log (deleted)
baseserve 7664 8360 root 4u a_inode 0,10 0 8510 [eventpoll]
baseserve 7664 8360 root 3w REG 202,2 172818 168742652 /data/log/baseserver-7664-20200120004646.log (deleted)
注释:
7664:为进程号(和ps faux输出的进程号一致)
3w 、5w:为节点信息
3.3.进入到cd /proc/7664/fd,查看所有的信息,如下图:
[root@ecs-1343-0001 ~]# cd /proc/7664/fd
[root@ecs-1343-0001 fd]# ll
total 0
lr-x------ 1 root root 64 Jan 20 00:46 0 -> /dev/null
lrwx------ 1 root root 64 Jan 20 00:46 1 -> socket:[33912]
lrwx------ 1 root root 64 Jan 20 00:46 10 -> socket:[44780]
lrwx------ 1 root root 64 Jan 20 00:46 11 -> socket:[43683]
lrwx------ 1 root root 64 Jan 20 00:46 12 -> socket:[43684]
lrwx------ 1 root root 64 Jan 20 00:46 13 -> socket:[44781]
lrwx------ 1 root root 64 Jan 20 00:46 14 -> socket:[44782]
lrwx------ 1 root root 64 Jan 20 00:46 15 -> socket:[44783]
lrwx------ 1 root root 64 Jan 20 00:46 16 -> socket:[38808]
lrwx------ 1 root root 64 Jan 20 00:46 17 -> socket:[44784]
lrwx------ 1 root root 64 Jan 20 00:46 18 -> socket:[38809]
lrwx------ 1 root root 64 Jan 20 00:46 19 -> socket:[38810]
lrwx------ 1 root root 64 Jan 20 00:46 2 -> socket:[43680]
lrwx------ 1 root root 64 Jan 20 00:46 20 -> socket:[38811]
lrwx------ 1 root root 64 Jan 20 00:46 21 -> socket:[44785]
lrwx------ 1 root root 64 Jan 20 00:46 22 -> socket:[41965]
lrwx------ 1 root root 64 Jan 20 00:46 23 -> socket:[44786]
lrwx------ 1 root root 64 Jan 20 00:46 24 -> socket:[44787]
lrwx------ 1 root root 64 Jan 20 00:46 25 -> socket:[39876]
lrwx------ 1 root root 64 Jan 20 00:46 26 -> socket:[43685]
lrwx------ 1 root root 64 Jan 20 00:46 27 -> socket:[41967]
lrwx------ 1 root root 64 Jan 20 00:46 28 -> socket:[38812]
lrwx------ 1 root root 64 Jan 20 00:46 29 -> socket:[42824]
l-wx------ 1 root root 64 Jan 20 00:46 3 -> /data/log/baseserver-7664-20200120004646.log (deleted)
lrwx------ 1 root root 64 Jan 20 00:46 30 -> socket:[42825]
lrwx------ 1 root root 64 Jan 20 00:46 31 -> socket:[41969]
lrwx------ 1 root root 64 Jan 20 00:46 32 -> socket:[45756]
lrwx------ 1 root root 64 Jan 20 01:29 33 -> socket:[439701]
lrwx------ 1 root root 64 Jan 20 00:46 4 -> anon_inode:[eventpoll]
l-wx------ 1 root root 64 Jan 20 00:46 5 -> /data/log/baseserver-7664-20200120004646.log (deleted)
lrwx------ 1 root root 64 Jan 20 00:46 6 -> socket:[43681]
lrwx------ 1 root root 64 Jan 20 00:46 7 -> socket:[44778]
lrwx------ 1 root root 64 Jan 20 00:46 8 -> socket:[43682]
lrwx------ 1 root root 64 Jan 20 00:46 9 -> socket:[44779]
看到没?对应的3 节点和5节点 不正是我们要的日志文件吗,,哈哈哈
l-wx------ 1 root root 64 Jan 20 00:46 3 -> /data/log/baseserver-7664-20200120004646.log (deleted)
l-wx------ 1 root root 64 Jan 20 00:46 5 -> /data/log/baseserver-7664-20200120004646.log (deleted)
拷贝3,5节点,即可get到我们要的日志文件,如下:
[root@ecs-1343-0001 fd]# cp 3 ~/baseserver_zsy.log.bak1
[root@ecs-1343-0001 fd]# cp 5 ~/baseserver_zsy.log.bak2
[root@ecs-1343-0001 fd]#
以上,便完美的解决日志被误删除的问题。。。