===============================================
2019/4/6_第2次修改 ccb_warlock
2019/4/6:修复原先脚本无法正确保存日志的问题;
===============================================
配置了记录日志的nginx,在运行较长时间后,产生的日志文件(access.log)会越来越大。
日志文件过大会带来下面的问题:
这时候就需要一种解决方案可以自动来做日志分割,分割后的日志不仅“干净”,也便于实现日志定时清理。
由于目前的nginx使用docker部署,而公司的业务大都需要nginx始终运行,网上的“停nginx,分割,重启nginx”的方案并不适合,故对网上的方案进行了改进,使得目前的方案也能适应业务运行要求。
image
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">mkdir -p /opt/sh vi /opt/sh/cutlogs.sh</pre>
[
复制代码
](javascript:void(0); "复制代码")
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">#!/bin/bash
YEAR=
(date +%m) DAY=
(date -d "yesterday" +%Y-%m-%d) LOGS_PATH=/usr/docker-vol/nginx/logs LOGS_BAK_PATH=/usr/docker-vol/nginx/logs-bak # 得到1级目录名 if [[
DAY)) -eq 1 ]] then if [[
MONTH)) -eq 1 ]] then LOGS_BAK_PATH=
((
((
LOGS_BAK_PATH/
((
LOGS_BAK_PATH/
((
LOGS_BAK_PATH/
{MONTH} fi # 创建目录 mkdir -p
{YESTERDAY}
cp
{LOGS_BAK_PATH}/
{YESTERDAY}.log cp
{LOGS_BAK_PATH}/
{YESTERDAY}.log cp
{LOGS_BAK_PATH}/
{YESTERDAY}.log # 清空日志
{LOGS_PATH}/admin_access.log > ${LOGS_PATH}/error.log</pre>
[
复制代码
](javascript:void(0); "复制代码")
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">chmod 777 /opt/sh/cutlogs.sh</pre>
PS.在创建定时任务之前,可以用下面的命令先试验脚本是否存在问题
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">bash /opt/cutlogs.sh</pre>
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">vi /etc/crontab</pre>
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># 每天0:00执行该脚本 0 0 * * * root bash /opt/sh/cutlogs.sh</pre>
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">systemctl restart crond</pre>
根据这个方案切割后的日志文件会根据这样的结构进行存放。
不停机做日志切割可能会出现日志记录丢失的情况(即拷贝走、清空源文件之间会有时间间隔),但是对于目前的业务,一天的日志信息量不大且丢失的日志对于整天的日志来说犹如沧海一粟,故现在先用这个方案来解决docker部署后的nginx日志切割。