我看上去很长,发现您无法通过syslog-startup.conf在/etc中将Syslog输出引导到缓冲区和文件。请参阅此信息:https://unix.stackexchange.com/questions/449156/how-to-set-up-syslog-to-log-to-log-to-to-both-file-buffer
我的解决方案是让一个cron作业运行一个bash脚本,该脚本将每隔几分钟运行,以从缓冲区中获取日志,并将其保存到我的嵌入式Linux设备上。方法是我通过执行诸如logread >> my_log_file
之类的操作,从缓冲区中获取第一组日志。
我遇到了一个试图插入awk命令
的问题if [ -f "${VAR_FILE}" ]; then
LASTTS=$(tail -n 1 "${VAR_FILE}" | grep -o '^.*swi-')
LASTTS=$(sed 's/.{5}$//' <<< "$LASTTS")
echo $LASTTS
fi
awk '$0 > "${LASTTS}"' msgs >> "${VAR_FILE}"
我不断获取所有日志>我上一个时间戳。如果我更改awk命令以将实际日期进行硬编码为
,它可以正常工作。 awk '$0 > "Mar 15 14:20:50"' msgs >> "${VAR_FILE}"
我在做什么错?
有三种情况:
- 尚未保存到文件
- 缓冲区有新内容和一些旧内容
- 缓冲区只有新内容(我们错过了一些)
我们只想附加来自Buffer的新内容。
假设BusyBox尴尬和外壳:
#!/bin/sh
if [ ! -f "$log" ]; then
# case 1
logread > "$log"
else
prev="$(tail -n 1 "$log")"
# case 2 or 3
logread | awk -v prev="$prev" '
new { print; next }
$0==prev { new=1 }
END { exit !new } # "fail" if no old line
' >> "$log"
# case 3
[ -n $? ] && logread >> "$log"
fi
所以我要寻找的答案是:
awk -v var="$LASTTS" '$0 > var' msgs >> "${VAR_FILE}"
这倾向于解决我遇到的问题。但是现在我面对这样的事实,它始终重复了最后一个时间戳