![将journalctl/系统日志“Process 1234 (processname) of user 1000 dumped core”消息提取到单独的文件中](https://linux22.com/image/215932/%E5%B0%86journalctl%2F%E7%B3%BB%E7%BB%9F%E6%97%A5%E5%BF%97%E2%80%9CProcess%201234%20(processname)%20of%20user%201000%20dumped%20core%E2%80%9D%E6%B6%88%E6%81%AF%E6%8F%90%E5%8F%96%E5%88%B0%E5%8D%95%E7%8B%AC%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD.png)
这是一个简单的问题。
我想要一个概述,例如包含每个进程的调试信息的单独文件,这些进程已转储从journalctl
.
这是一个示例输出:
Jan 17 12:49:45 localhost systemd-coredump[137987]: [
答案1
不要问我为什么,但journalctl _COMM=systemd-coredump
它不起作用:-- No entries --
。没什么大不了。
我确信通过使用 JSON 输出可以更容易地完成,但这将涉及使用和解析jq
输出,但由于我不是一个合适的程序员,awk
所以我决定使用它。这是我得到的:
#! /bin/bash
journalctl --output=short-unix | awk '{
if ($1 ~ /^[0-9]/) {
if ( found == 1 && fname != "") system("touch -d @"unixts" "fname)
found=0
}
if ($0 ~ "dumped core") { # extract timestamp and process name and generate a filename
split($1, arr , ".")
if(arr[1] != "") unixts=arr[1]
psta=index($0, "(")
pend=index($0, ")")
pname=substr($0, psta+1, pend-psta-1)
fname=pname"-"unixts".txt"
found=1
}
if (found == 1) print $0 >> fname
}'
因此,您可以轻松查看文件,并且这些文件具有与相应日志事件相同的时间戳:
$ ls -la
drwxr-xr-x. 2 root root 740 Jan 20 13:12 .
drwxrwxrwt. 22 root root 820 Jan 20 13:12 ..
-rw-r--r--. 1 root root 105937 Jan 14 19:55 chrome-1673726131.txt
-rw-r--r--. 1 root root 73845 Jan 13 22:20 xfce4-panel-1673648402.txt
-rw-r--r--. 1 root root 73853 Jan 14 18:05 xfce4-panel-1673719532.txt
-rw-r--r--. 1 root root 72205 Jan 16 15:33 xfce4-panel-1673883202.txt
-rw-r--r--. 1 root root 73845 Jan 17 12:49 xfce4-panel-1673959785.txt
-rw-r--r--. 1 root root 62702 Jan 10 08:31 xfce4-screensav-1673339519.txt
-rw-r--r--. 1 root root 62577 Jan 10 08:32 xfce4-screensav-1673339524.txt
-rw-r--r--. 1 root root 62702 Jan 11 11:13 xfce4-screensav-1673435632.txt
-rw-r--r--. 1 root root 62577 Jan 11 11:14 xfce4-screensav-1673435640.txt
希望这对其他人也有用。