我已经看了很长时间,发现无法通过/ etc中的syslog-startup.conf将syslog输出定向到缓冲区和文件。请参见:https://unix.stackexchange.com/questions/449156/how-to-set-up-syslog-to-log-to-both-file-buffer
我的解决方案是让cron作业运行bash脚本,该脚本每隔几分钟运行一次,以从缓冲区中获取日志并将其保存到文件中,然后放入嵌入式Linux设备中。方法是通过执行logread >> my_log_file
之类的操作从缓冲区中获取第一组日志,然后从my_log_file中获取最后一个条目,从中获取时间戳,然后使用它来获取具有时间戳的新日志大于此时间戳。
我在尝试将timstamp插入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}"
我在做什么错了?
答案 0 :(得分:1)
有三种情况:
我们只想追加缓冲区中的新内容。
假设busybox awk和shell:
#!/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
答案 1 :(得分:0)
所以我一直在寻找答案:
awk -v var="$LASTTS" '$0 > var' msgs >> "${VAR_FILE}"
这倾向于解决我遇到的问题。但是现在我面临这样的事实,它总是在最后一次重印时重复