我通常不会做这种东西,所以我只需要问。 如何制作一个脚本来检查一个日志文件,可以说它的名字是log.txt,抓取所有的东西,但是从前100000行到新的log.txt文件,并删除旧的log.txt? 它也必须每月运行。
到目前为止,我的零编码知识,我只设法创build一个脚本,每月会删除log.txt一次(新的一个自动生成),但我真的想保留数据,除了最古老的100 000条目,如下所述。
这是旧的脚本
#!/bin/sh find /mnt/usb_storage/ -type f -name "log.txt" -exec rm -r {} \;
我如何实现它:
# cd /privRoot # chmod 755 deleteLogMonthly.sh # crontab -e 59 23 1 * * deleteLogMonthly.sh
你正试图重新发明轮子。
Logrotate有效地做到这一点:
https://www.linode.com/docs/uptime/logs/use-logrotate-to-manage-log-files
http://www.rackspace.com/knowledge_center/article/understanding-logrotate-utility
而不是一个硬的10万行,你给它一个时间间隔,它会开始写入一个新的日志文件,保持旧的。
如果出于某种奇怪的原因,logrotate不是一个真正的选项,请查看Cronolog:
有没有其他的日志转换为Apache日志?
http://linux.die.net/man/1/cronolog
或者真的手工制作一个这样的bash脚本:
这仍然是基于几天,但你可以在那里添加一些行数。
在logrotateconfiguration中添加以下内容(/etc/logrotate.d/下的新文件)
/mnt/usb_storage/log.txt { rotate 5 # Change this to number of files you need to preserve monthly prerotate /usr/bin/sed -e '1,100000d' < /mnt/usb_storage/log.txt endscript postrotate <some another action> endscript }
你可以使用logrotate -d /etc/logrotate.d/mylogrotate.conf来validation它(假设你已经创build了这个文件)
查找“logrotate”的手册页或通过shell脚本自己创build。 没有魔法。 如果你知道如何做到这一点,只要将它们放在一个txt文件中,就可以了。
也检查工具“尾巴”的手册页。 它被devise为显示“尾巴”或者更精确地显示文件的最新X行。 “男人的尾巴”为您提供了更多关于如何使用它的信息。