我想在每次系统启动时创建一个新的系统日志文件,并将旧数据保存在另一个文件中,以便我可以检测当前启动的异常行为(如果有)。 syslogd 是否有任何配置可以实现此目的。或者应该使用带有 logrotate 的 crontab 作业来实现此目的?
答案1
将这些行(旨在与 shell 无关)添加到/etc/rc.local
,或将它们放入脚本文件中(前面是 shebang #!/bin/sh
)并放入一行以在 中运行它/etc/rc.local
。
# find the line number for the (most recent) start of syslog
LOGSTART=$(grep -n "syslog.*start" /var/log/syslog.1|cut -f1 -d:|tail -n1)
# give up if none found
[ -n "$LOGSTART" ] || exit 0
# add preceding lines to the long-term log
sed "$LOGSTART,\$d" /var/log/syslog >>/var/log/syslog.old
# make a copy of the log
cp /var/log/syslog /tmp/syslog
# recreate the active log
sed -n "$LOGSTART,\$p" /tmp/syslog >/var/log/syslog
# remove the copy
rm /tmp/syslog
在此过程中停止 syslogd(或 rsyslogd 或其他)可能会更好,然后重新启动它,但我已将其留给您的家庭作业。
首先检查是否grep "syslog.*start" /var/log/syslog
确实找到了标记系统记录器启动的行,如果没有,则适当修改此行。日志文件有时是 /var/log/messages 但可能不是你的情况,因为你提到了 syslog。