如何使cron脚本清理日志文件?

我通常不会做这种东西,所以我只需要问。 如何制作一个脚本来检查一个日志文件,可以说它的名字是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

https://www.digitalocean.com/community/tutorials/how-to-configure-logging-and-log-rotation-in-apache-on-an-ubuntu-vps

而不是一个硬的10万行,你给它一个时间间隔,它会开始写入一个新的日志文件,保持旧的。

如果出于某种奇怪的原因,logrotate不是一个真正的选项,请查看Cronolog:

有没有其他的日志转换为Apache日志?

http://linux.die.net/man/1/cronolog

或者真的手工制作一个这样的bash脚本:

http://www.paperstreetonline.com/2014/12/09/bash-script-an-alternative-to-logrotate-d-to-rotate-asterisk-log-files/

这仍然是基于几天,但你可以在那里添加一些行数。

在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行。 “男人的尾巴”为您提供了更多关于如何使用它的信息。