目录
切割理由:假设一个网站访问量特别大,每天 access_log 文件有 2 个 G,如果想从文件中查找一下信息,光打开就很慢了,做日志切割的话,便于维护。
需求描述:每分钟一个文件放入到相应的文件夹中。任务会每分钟读取对应路径下的日志文件,然后分析入库。
日志文件格式需为:nginxLogFilePath/YYYYMM/DD/HH/mm.log。
例子:/var/log/nginx/201904/18/20/28.log。
方式一:自定义脚本
1. 编写脚本
#这里是每分钟切割一次日志的shell脚本
#!/bin/bash
base_path='/var/log/nginx' #定义log基本路径变量
mm=$(date -d "1 minute ago" +"%M" ) #分钟定义(格式为:05)
modify_file_name="$mm.log" #修改的log文件名
HH=$(date -d today +"%H" ) #小时定义(格式为:02)
dd=$(date -d today +"%d" ) #日期定义(格式为:06)
YYYYMM=$(date -d today +"%Y%m" ) #年月定义(格式为:202408)
YYYYMM_folder="$base_path/$YYYYMM"; #年月的文件夹
YYYYMM_DD_folder="$base_path/$YYYYMM/$dd"; #年月日的文件夹
YYYYMM_DD_HH_folder="$base_path/$YYYYMM/$dd/$HH"; #年月日时的文件夹
#如果年月的文件夹不存在,则重新创建一个
if [ ! -d "$YYYYMM_folder" ];
then
mkdir $YYYYMM_folder
fi
if [ ! -d "$YYYYMM_DD_folder" ];
then
mkdir $YYYYMM_DD_folder
fi
if [ ! -d "$YYYYMM_DD_HH_folder" ];
then
mkdir $YYYYMM_DD_HH_folder
fi
mv $base_path/access.log $YYYYMM_DD_HH_folder/$modify_file_name #修改名字
kill -USR1 `cat /run/nginx.pid` #平滑关闭nginx,方便日志切割
注释:在 Docker CentOS 容器中,nginx 的 PID 文件通常位于 /var/run/nginx.pid
。
这个文件的位置是基于 Linux 系统的标准目录结构。
/var/run
目录用于存储系统启动以来的实时数据,包括进程标识(PID)文件。按照命名惯例,每个服务都有自己的 PID 文件,并且命名规则为<program-name>.pid
。因此,nginx 服务的 PID 文件名为/var/run/nginx.pid
,其中存放的是 nginx master 进程的进程号。这个文件对于 nginx 服务的正常运行至关重要,因为它允许系统或其他服务跟踪 nginx 的进程状态。如果在 CentOS 容器中遇到 nginx 服务相关的问