方案一 脚本+crontab

一、 编写脚本

vi nginx-split.sh

# 拷贝日志文件到 昨天的log中 -b  split 可以进行文件切割,如果不需要文件的切割可以将 split -b 100k -d 换成 cp ,-b指定单个文件大小,-d 指定如果单个文件过大,进行切割时文件的后缀为数字
split -b 100k -d  /opt/nginx.log /opt/logs/nginx.log.`date -d yesterday +%Y%m%d-%H:%M:%S`.log
# 清空nginx.log 日志,这个地方于要写绝对路径,否则导致日志文件不会被清空
cat /dev/null > /opt/nginx.log

二、授权

给刚才编辑是脚本文件授予执行权限

chmod u+x nginx-split.sh

二、加入定时器


crontab -e

#每隔1分钟执行一次
*/1 * * * * /opt/nginx-split.sh

定时任务加入成功以后会有如下提示:
在这里插入图片描述
查看定时任务列表,以及定时任务是否在正常执行
在这里插入图片描述
如果输入pgrep cron 没找到相关进程,则任务也不会执行。=

最后执行的结果如下:
在这里插入图片描述

缺点: 如果日志文件比较大,MV是需要时间的,这段时间内的日志有可能丢失。logrotate可以在切割日志的同时,不丢失数据

方案二 logrotate+crontab

参考文章: Linux日志切割神器logrotate原理介绍和配置详解

logrotate 程序是一个日志文件管理工具(一般centos都自带)。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转 储,这个过 程一般通过 cron 程序来执行。logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。系统自带的日志切割的配置文件在/etc/logrotate.conf 和 /etc/logrotate.d/syslog 里面。

一、 编写配置文件

vim  test-logsplit
/opt/my/test.log{
	daily
	#配置能有多少个日志文件,超过了就会将以前的删除
	rotate 10
	missingok
	notifempty
	minsize=1M
    maxsize=10M
    #等test.log 到这个大小就会进行日志切割,而不是切割后的日志文件
    size=1M
	sharedscripts
	postrotate
		cat /dev/null > /opt/my/test.log
	endscript
}

需要注意的是如果报这个错误一般就是文件编码错误,将文件删除,重新手动输入一遍。
在这里插入图片描述

加入定时器

crontab -e


# 每一分钟执行一次
*/1 * * * * /usr/sbin/logrotate -vf /opt/test-logsplit

结果如下图:
在这里插入图片描述

参考连接

CentOS下的日志切割
Linux日志切割神器logrotate原理介绍和配置详解
linux日志切割

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐