shell实战脚本--Nginx日志处理

#创作灵感#

22年写的一个小脚本,当时不会什么特殊语法,都是用的基础语句写出来的,但这几年也算是频繁用到这个脚本,在部署nginx的本机上运行即可

1、脚本功能

这个脚本是用来处理Nginx日志的,主要功能包括:
1.设置日志目录变量:LOG_DIR为Nginx日志存储目录。
2.获取昨天的日期和月份。
3.拷贝日志文件到对应的日期目录:日志文件移动到以昨天的月份命名的目录下,并在目录名后面添加时间戳。
4.发送信号给Nginx以重新打开日志文件。

2、脚本代码

#!/bin/bash

# 定义日志存储目录
LOG_DIR="/usr/local/nginx/logs"
# 获取昨天的日期和月份
YESTERDAY_DATE=$(date -d "yesterday" +%F)  # 昨天的日期,格式为 YYYY-MM-DD
LOG_MONTH_DIR=$(date -d "yesterday" +%Y-%m)  # 昨天的月份,格式为 YYYY-MM

# 需要处理的日志文件列表,可以根据实际情况添加更多日志文件
LOG_FILE_LIST="default.access.log"

# 遍历日志文件列表
for LOG_FILE in $LOG_FILE_LIST; do
    # 创建存放昨天日志的目录,如果目录不存在的话
    if [ ! -d "$LOG_DIR/$LOG_MONTH_DIR" ]; then
        mkdir -p "$LOG_DIR/$LOG_MONTH_DIR"
    fi

    # 构建新的日志文件路径,包括日期和时间戳
    NEW_LOG_FILE="$LOG_DIR/$LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_DATE}"

    # 移动日志文件到新的路径
    mv "$LOG_DIR/$LOG_FILE" "$NEW_LOG_FILE"

    # 输出日志文件移动信息
    echo "Moved $LOG_DIR/$LOG_FILE to $NEW_LOG_FILE"
done

# 向Nginx主进程发送信号,重新打开日志文件
if [ -f /var/run/nginx.pid ]; then
    kill -USR1 $(cat /var/run/nginx.pid)
    echo "Sent USR1 signal to Nginx for log rotation."
else
    echo "Nginx PID file not found, skipping log rotation signal."
fi

3、注释详细解释

因需标注点很多,为了不影响可读性,我将较简单的语句注释写在这里方便阅读

  1. LOG_DIR="/usr/local/nginx/logs":这是Nginx日志文件的存储目录。通常情况下,自动安装的Nginx的日志文件会存储在这个目录下。
  2. YESTERDAY_DATE=$(date -d "yesterday" +%F):这个命令使用date工具获取昨天的日期,并将其格式化为YYYY-MM-DD的形式,存储在YESTERDAY_DATE变量中。这个变量后续用于构建新的日志文件路径。
  3. LOG_MONTH_DIR=$(date -d "yesterday" +%Y-%m):同样是使用date命令获取昨天的日期,但这里是将其格式化为YYYY-MM的形式,用于创建存放昨天日志的目录。
  4. LOG_FILE_LIST="default.access.log":这是需要处理的日志文件列表。在这篇文章中,只有一个日志文件default.access.log,但你可以根据需要添加更多的日志文件。
  5. for LOG_FILE in $LOG_FILE_LIST; do:这是一个循环语句,用于遍历日志文件列表中的每个日志文件。
  6. if [ ! -d "$LOG_DIR/$LOG_MONTH_DIR" ]; then:这个条件语句检查存放昨天日志的目录是否存在,如果不存在,则使用mkdir -p命令创建。
  7. NEW_LOG_FILE="$LOG_DIR/$LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_DATE}":这行代码调用变量构建了新的日志文件路径。它包括了昨天的日期和时间戳,以及原始日志文件的名称。
  8. mv "$LOG_DIR/$LOG_FILE" "$NEW_LOG_FILE":这行代码将原始日志移动到新的路径,实现了按日期归档日志。
  9. kill -USR1 $(cat /var/run/nginx.pid):这行代码向Nginx主进程发送了USR1信号。-USR1:这是kill命令的选项之一,用于指定要发送的信号类型。USR1信号是Nginx中重新打开日志文件的信号。会重新打开日志文件,实现日志切割和归档的目的。
  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值