主页
文章
知识库
云盘
工具
登录
登录
注册
忘记密码
反馈
文章
logrotate切割nginx日志
logrotate切割nginx日志
lyjin
2022-03-18
[TOC] > 环境: Ubuntu18.04 logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。可以根据日志的大小,或者根据其使用的天数来转储,这个过程一般由cron来执行。 > logrotate还可以用于压缩日志文件,以及发送日志到指定的email。 #### 编写logrotate配置文件 配置文件如下 ```shell /nginx日志的路径/logs/*.log { #切割日志周期 daily weekly monthly daily #忽略错误 missingok #保留14个文件 rotate 12 #压缩文件 compress #延迟一天压缩文件 delaycompress #以日期为单位 默认-%Y%m%d dateext #空文件不切割 notifempty #创建 0640权限的日志文件 create 0640 YOUR_USER YOUR_USER sharedscripts prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then run-parts /etc/logrotate.d/httpd-prerotate; fi endscript postrotate if [ -f /nginx.pid的路径/nginx.pid ]; then #切割日志完成后通知nginx重新打开日志文件,不终止ngin kill -USR1 `cat /nginx.pid的路径/nginx.pid`; fi endscript } ``` 测试配置: ```shell # -v 输出详细信息 -f 强制执行 $logrotate -f -v /etc/logrotate.d/配置文件 ``` #### 定时任务 >logrotate基于 cron指定定时任务,安装系统时就已经指定。 ``` # 查看logrotate每天执行配置 $cat /etc/cron.daily/logrotate # 查看cron的配置 $cat /etc/crontab # 将daily那一行的执行时间可以改为23点55分,如下 # 55 23 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) ``` 重启定时任务 ``` # ubuntu # 重启 /etc/init.d/cron restart # 启动 /etc/init.d/cron restart # 停止 /etc/init.d/cron restart ``` #### docker环境 >如果nginx放置在docker中,切割nginx日志可以使用宿主机的logrorate,但是kill -USR1 ... 命令需要放置到docker中执行。 创建一个rotate-do.sh文件(在容器内部执行kill命令), 将此文件映射到容器内的 /etc/log-rotate/rotate-do.sh 文件 ```shell # /run/nginx.pid 为容器内部 nignx.pid 的路径 kill -USR1 /run/nginx.pid ``` 修改上述 logrotate中的postscript部分,切割备份完成后,在宿主机中执行docker中的脚本 ```shell docker exec 容器名称/容器ID bash /etc/log-rotate/rotate-do.sh ```
分享
×
用手机扫码分享
没有评论
请登陆后评论
新建评论
移除
关闭
提交