Linux下程序退出(崩溃)时总会留下一些蛛丝马迹,问题追踪思路总结如下:
1、查看程序日志,确定退出(崩溃)时间。
2、coredumpctl查看是否有崩溃记录。
3、查看系统日志 cat /var/log/message,已切分压缩的日志使用 xzcat 查看。
4、查看历史命令 history,看一下是否有正常执行退出的命令记录。
追踪过程如下:
1、查看程序在09-17 14:23退出(崩溃)。
2、coredumpctl查看没有崩溃记录。
3、查看系统日志,发现09-17 14:22左右没有特殊的段错误日志,怀疑是人为停止程序。
4、历史命令发现的确是人为执行了kill脚本关掉了程序。
5、原因明确,问题解决。
附:history命令用法
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history,每个用户文件下都有一个历史命令的保存文件,相互之间不会冲突。直接用history看到的历史命令是要比.bash_history文件中的历史命令多一些的,因为我们登录之后新操作的命令只有等我们正确退出之后才会写入到.bash_history中。history -w就可以强制将当前的历史命令写入到.bash_history中去。
历史命令默认会保存1000条,如果觉得太少,可以修改/etc/profile中HISTSIZE=1000,改成你想要的值。
注意:history只针对登录用户下执行有效,即使root用户也无法得到其它用户histotry历史。当然,还是有办法记录所有登陆用户的操作历史的:
在/etc/profile里面加入以下代码:
PS1="`whoami`@`hostname`:"'[$PWD]'
history
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
if [ ! -d /tmp/dbasky ]
then
mkdir /tmp/dbasky
chmod 777 /tmp/dbasky
fi
if [ ! -d /tmp/dbasky/${LOGNAME} ]
then
mkdir /tmp/dbasky/${LOGNAME}
chmod 300 /tmp/dbasky/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date "+%Y-%m-%d_%H:%M:%S"`
export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT"
chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null
source /etc/profile 使用脚本生效,退出重新登录后,通过查看日志文件就可以查看所有用户的操作历史。
参考:https://www.cnblogs.com/gaojun/archive/2013/10/24/3385885.html