天天看点

nohup启动造成日志过大的问题(使用logrotate工具分割日志)

以下所有测试均在Ubunt 22.04下测试和严重

root@aaa-Inspiron-3847:/etc/logrotate.d# cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=22.04

DISTRIB_CODENAME=jammy

DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"

root@aaa-Inspiron-3847:/etc/logrotate.d#           

我们知道在Linux下,使用下面的命令启动服务时

bin/ck600svr -c config/ck600svr.properties &           

当我们关闭控制台时,服务会自动停止

nohup启动造成日志过大的问题(使用logrotate工具分割日志)

关闭tab标签,服务会自动关闭

所以我们经常增加nohup来启动服务

nohup bin/ck600svr -c config/ck600svr.properties &           

这样当我们关闭控制台时,服务可以后台运行

但是这样会有个问题,会默认生成一个nohup.out的日志

nohup启动造成日志过大的问题(使用logrotate工具分割日志)

如果服务长期运行,这个日志文件会越来越大,以至于无法打开。

解决办法一:不生成nohup.out文件

nohup ./bin/ck600svr -c config/ck600svr.properties >/dev/null 2>log & //只输出错误信息到日志文件
  nohup ./bin/ck600svr -c config/ck600svr.properties >/dev/null 2>&1 & //无任何信息输出           

2>&1表示将标准错误输出重定向到标准输出,这样,程序或者命令的正常输出和错误输出就可以在标准输出输出。

这样就没有nohup.out文件了,但是我如果还想看nohup.out,还希望nohup能自动拆分是不是就更完美了,于是乎logrotate出场了。

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。

/etc/logrotate.conf 和/etc/logrotate.d/,其中

logrotate.conf 是主要的参数文件,logrotate.d 是一个目录,该目录里面的所有数据都会被主动读入/etc/logrotate.conf 当中来进行。另外,在/etc/logrotate.d/ 里面的文件中,如果没有指定一些详细的设置,则以 /etc/logrotate.conf 的规定来指定为默认值。

nohup启动造成日志过大的问题(使用logrotate工具分割日志)

vim ck600查看配置文件:

nohup启动造成日志过大的问题(使用logrotate工具分割日志)

logrotate 配置文件的主要参数

参 致 参数说明
daily 日志的轮替周期是毎天
weekly 日志的轮替周期是每周
monthly 日志的轮控周期是每月
rotate数宇 保留的日志文件的个数。0指没有备份
compress 当进行日志轮替时,对旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组.如create 0600 root utmp
mail address 当进行日志轮替时.输出内存通过邮件发送到指定的邮件地址
missingok 如果日志不存在,则忽略该日志的警告信息
nolifempty 如果曰志为空文件,則不进行日志轮替
minsize 大小 日志轮替的最小值。也就是日志一定要达到这个最小值才会进行轮持,否则就算时间达到也不进行轮替
size大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如size 100k
dateext 使用日期作为日志轮替文件的后缀,如secure-20130605
sharedscripts 在此关键宇之后的脚本只执行一次
prerotate/cndscript 在曰志轮替之前执行脚本命令。endscript标识prerotate脚本结束
postrolaie/endscript 在日志轮替之后执行脚本命令。endscripi标识postrotate脚本结束

然后使用 logrotate -f 使配置生效,你学会了么?

继续阅读