Nginx日志切割

奥黛丽·逐爱者
2024-05-15 / 0 评论 / 0 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年05月15日,已超过127天没有更新,若内容或图片失效,请留言反馈。
方式一
logrotate配置分割

logrotate简单介绍

logrotate 是一个 Linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。

下面命令可以查看是否安装了

logrotate --version

lw738go1.png

/etc/logrotate.conf 是主配置文件, /etc/logrotate.d 文件夹下面是自定义的配置文件

新增切割nginx日志的配置文件

/etc/logrotate.d 目录下新增nginx文件

nano nginx_log 写入下面内容(我的日志文件目录是/usr/local/nginx/logs/)

/usr/local/nginx/logs/
 
/usr/local/nginx/logs/*.log {
    daily        # 按天分割              
    rotate 30 
    create
    sharedscripts   # 所有的文件切割之后只执行一次下面脚本,通知nginx重新打开新的日志文件进行后续写入
    postrotate
        if [ -f /usr/local/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`  # 通过USER1信号通知nginx重新打开日志文件
        fi
    endscript
}

lw75kodp.png

如果报错则删掉注释

这样就会每天定时分割日志了

也可以手动执行命令测试一下能否正常分割日志

logrotate -f /etc/logrotate.d/nginx

lw73fgjg.png

修正配置文件后,您需要通知 logrotate 重新读取配置文件,或者重新启动 logrotate 服务。在大多数Linux系统中,您可以使用以下命令来重新启动 logrotate:

sudo service logrotate restart

或者,如果您使用的是基于systemd的系统,可以使用:

sudo systemctl restart logrotate

又或者

logrotate是属于rsyslog里的其中一个服务重启的方法:
CentOS6命令:service rsyslog restart
CentOS7命令:systemctl restart rsyslog
另外,可以手动执行分隔命令进行测试【以nginx的为例】
logrotate -f /etc/logrotate.d/nginx

确保您的 logrotate 配置文件格式正确,并且没有语法错误。您可以通过运行 logrotate -d /etc/logrotate.d/nginx_log 来测试配置文件,而不实际执行轮换,-d 参数可以输出 logrotate 执行时的调试信息。

在修改配置文件并重新启动 logrotate 服务之后,错误应该不会再出现,日志文件将按照新的配置进行管理。
lw75rmxo.png

方式二
定时任务执行分割脚本

创建一个sh文件,写入以下内容(个别内容根据自己nginx的情况修改)

我这里的文件为 /usr/local/nginx/log_bak.sh

#/bin/bash 
 
yesterday=$(date +%Y-%m-%d)  #取得服务器当前时间
 
savepath_log=' /var/log/nginx_bak'#分割后的日志文件保存目录(注意结尾目录斜杠去掉)
 
nglogs='/usr/local/nginx/logs'  #nginx日志文件目录,具体根据实际地址替换(结尾目录斜杠去掉 以免与下面路径中的"/"重复)
 
 
 
#判断分割日志保存目录是否存在不存在则创建 
 
if [ ! -d ${savepath_log} ]   # 注意 语句之间 空格不可省略,这是bash脚本 不是php脚本那样随和 
 
then
 
mkdir -p ${savepath_log}
 
fi 
 
#通过mv命令将日志移动到分割后的日志目录里,然后发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件。
 
mv ${nglogs}/access.log  ${savepath_log}/access_${yesterday}.log  #具体根据你的实际日志文件名路径 进行修改access.log名字
 
mv ${nglogs}/error.log  ${savepath_log}/error_${yesterday}.log  #具体根据实际日志文件名地址 修改error.log名字
 
mv ${nglogs}/host.access.log  ${savepath_log}/host.access_${yesterday}.log 
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)  #通知nginx重新生成新的日志
添加定时任务
crontab -e #后添加下面内容

59  23  * * * /usr/local/nginx/log_bak.sh(自己写的脚本的路径)

这样每天的23点59就会将当天的日志进行备份,并生成新的日志文件继续记录访问日志

方式三
手动切割日志

如果您更喜欢手动管理日志,或者没有使用 logrotate,您可以编写一个自定义的脚本来切割 NGINX 日志。这个脚本可以运行 gzip 来压缩旧的日志文件,然后创建一个新的日志文件。

#!/bin/bash
gzip /var/log/nginx/access.log
gzip /var/log/nginx/error.log
touch /var/log/nginx/access.log
touch /var/log/nginx/error.log
chown www-data:adm /var/log/nginx/access.log /var/log/nginx/error.log

路径以实际为准。

0

评论 (0)

取消