nginx日志切割脚本
#!/bin/bash
# utf-8
# description: nginx滚动切割脚本,按照500M进行滚动切割
# ---------------------------------------------------------------------
log_directory="/export/servers/nginx/logs" # 日志文件目录
max_size=500 # 日志文件的最大大小,单位为MB
log_array=("access.log" "error.log") # 要操作的日志集合
pid_file="/export/servers/nginx/run/nginx.pid" # nginx的PID
# ---------------------------------------------------------------------
count=0
# 日志滚动归档
logrotate() {
local log_file="$1"
local log_path="${log_directory}/${log_file}"
if [[ ! -f "$log_path" ]]; then
return
fi
local current_size=$(stat -c %s "$log_path")
# 判断当前日志文件大小是否超过最大大小
if ((current_size > max_size * 1024 * 1024)); then
local log_file_prefix="${log_file%.*}"
# 创建一个新的日志文件名,格式为access_YYYYMMDD_HHMMSS.log
local new_log_file="${log_file_prefix}.$(date +%Y%m%d_%H%M%S).log"
# 重命名当前日志文件
mv -f "$log_path" "${log_directory}/${new_log_file}"
# 重新启动nginx,使其生成新的日志文件
((count++))
fi
}
# 重新生成日志文件写入
generate_log_file() {
if ((count > 0)); then
/bin/kill -USR1 "$(cat "$pid_file")" 2>/dev/null
fi
}
# 删除历史日志
delete_history_log() {
find "$log_directory" -mtime +5 -type f -exec rm -f {} \;
}
# 主函数
main() {
for log in "${log_array[@]}"; do
logrotate "$log"
done
generate_log_file
delete_history_log
}
main
原创:做时间的朋友