我正在运行使用 Yocto 衍生的 Linux 发行版的嵌入式系统。内核版本:4.1.15-2.0.0。
我们需要管理日志,并使用 logrotate 进行管理。要求我们有 72 小时的日志,每小时一个文件(此处修改为每 5 分钟轮换一次,以进行测试)。这样,客户就可以卸载规定操作时间的特定日志。他们希望它坚如磐石,因为访问操作信息的唯一方法是通过日志,而这些日志文件是通过我们提供的应用程序上传的。
我这里有 logrotate.conf 文件:
/var/log/messages {
create 700 root root
rotate 72
maxage 4
ifempty
prerotate
/bin/cp /var/volatile/log/messages /home/root/logs/
endscript
compress
}
我通过 contab 条目运行 logrotate 系统,该条目每小时执行一次 conjob。以下是 crontab 中的条目:
*/5 * * * * /etc/logrotateScript.sh
(注意:为了测试目的,我已将 cron 任务改为每 5 分钟运行一次)
当然,脚本文件的内容如下:
#!/bin/sh
/usr/sbin/logrotate -f /etc/logrotate.conf
因此,这有效......呃嗯大部分有效!!
我有时会得到序列中缺少的文件。我的意思是,例如:
root@imx6qrsb6410a2:~# ls -lh /var/log/
-rw-r--r-- 1 root root 0 Jan 9 17:31 boot
-rw-r--r-- 1 root root 25.7K Jan 9 17:31 dmesg
-rw-r--r-- 1 root root 292 Jan 9 17:31 lastlog
-rwx------ 1 root root 32.8M Jan 9 18:49 messages
-rwx------ 1 root root 34.9M Jan 9 18:45 messages.0
-rw-r--r-- 1 root root 314 Jan 9 18:45 messages.1.gz
-rw-r--r-- 1 root root 313 Jan 9 18:00 messages.10.gz
-rw-r--r-- 1 root root 314 Jan 9 17:55 messages.11.gz
-rw-r--r-- 1 root root 302 Jan 9 17:50 messages.12.gz
-rw-r--r-- 1 root root 379 Jan 9 17:45 messages.13.gz
-rw-r--r-- 1 root root 338 Jan 9 17:40 messages.14.gz
-rw-r--r-- 1 root root 406 Jan 9 17:35 messages.15.gz
-rw-r--r-- 1 root root 313 Jan 9 18:40 messages.2.gz
-rw-r--r-- 1 root root 312 Jan 9 18:30 messages.4.gz
-rw-r--r-- 1 root root 314 Jan 9 18:25 messages.5.gz
-rw-r--r-- 1 root root 357 Jan 9 18:20 messages.6.gz
-rw-r--r-- 1 root root 307 Jan 9 18:15 messages.7.gz
-rw-r--r-- 1 root root 312 Jan 9 18:10 messages.8.gz
-rw-r--r-- 1 root root 311 Jan 9 18:05 messages.9.gz
您可以看到 messages.3.gz 文件丢失。此外,时间间隔显示 messages.3.gz 应该在 18;45 时创建,因此有 10 分钟的时间间隔内 logrotate 没有执行其操作。
我查看了丢失文件两侧的 2 个文件的内容,数据确实丢失了。
什么情况下会导致 logrotate 无法完成其任务?我还注意到这种情况只发生在 messages.3.gz 上,这很奇怪。没有其他应用程序接触 messages.#.gz 文件,所有应用程序都只写入消息。
如有任何帮助或意见,我们将不胜感激。
干杯!!