告别繁琐,用shell脚本轻松分割Nginx日志
  WnwLYQFkydn6 2023年11月13日 30 0

告别繁琐,用shell脚本轻松分割Nginx日志_日志文件

首先,我们需要创建一个名为split_nginx_logs.sh的shell脚本。在这个脚本中,我们将实现以下功能:

  1. 接收用户输入的日志文件路径和分割后的日志文件路径。
  2. 使用awk命令提取日志文件中的日期和时间信息。
  3. 根据日期和时间信息,将日志文件分割成多个文件。
  4. 为每个分割后的文件添加一个序号作为文件名。
  5. 删除原始日志文件。
  6. 将分割后的日志文件压缩成一个zip文件。

下面是split_nginx_logs.sh脚本的内容:

#!/bin/bash

# 检查参数数量
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 <input_log_file> <output_dir>"
    exit 1
fi

# 获取输入日志文件路径和输出目录路径
input_log_file="$1"
output_dir="$2"

# 检查输入日志文件是否存在
if [ ! -f "$input_log_file" ]; then
    echo "Error: input log file does not exist."
    exit 1
fi

# 检查输出目录是否存在,如果不存在则创建
if [ ! -d "$output_dir" ]; then
    mkdir -p "$output_dir"
fi

# 使用awk命令提取日志文件中的日期和时间信息,并根据日期和时间信息分割日志文件
awk 'BEGIN { OFS = "[%d/%b/%Y:%H:%M:%S]" } { print > "'${output_dir}/nginx-'${1}'-'$2}'.log" }' "$input_log_file" | sort | uniq -c | while read line; do
    # 为每个分割后的文件添加一个序号作为文件名
    output_file="${output_dir}/nginx-${line}-$(date +%s).log"
    date -d @$(echo "$line * 86400 + $(echo "$line % 86400" | cut -d ':' -f 2)" | tr -d '[:space:]') +"%d/%b/%Y:%H:%M:%S" > "$output_file" || true
done

# 删除原始日志文件
rm "$input_log_file" || true

# 将分割后的日志文件压缩成一个zip文件
cd "$output_dir" && zip -r "nginx-logs.zip" ./* || true

使用方法:

  1. 将上述脚本内容保存为split_nginx_logs.sh文件。
  2. 赋予脚本执行权限:chmod +x split_nginx_logs.sh
  3. 运行脚本,传入输入日志文件路径和输出目录路径:./split_nginx_logs.sh /path/to/input.log /path/to/output
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年12月11日   27   0   0 nginx客户端服务端
  jnZtF7Co41Wg   2023年11月28日   19   0   0 nginx文件名linux命令
  stLBpDewCLT1   2023年12月08日   27   0   0 nginx
  jnZtF7Co41Wg   2023年12月10日   20   0   0 nginx客户端服务端NFS
  eHipUjOuzYYH   2023年12月06日   25   0   0 nginxHTTP
  eHipUjOuzYYH   2023年12月06日   22   0   0 nginx加载IPV6
WnwLYQFkydn6