nginx日志切割shell脚本


下面是一个简单的Shell脚本示例,用于切割Nginx的访问日志和错误日志。这个脚本会定期(比如每天)将旧的日志文件重命名,并创建一个新的日志文件供Nginx继续写入。

请注意,这个脚本假设Nginx的日志文件位于`/var/log/nginx/`目录下,并且日志文件名为`access.log`和`error.log`。你可以根据自己的需要修改这个路径和文件名。


#!/bin/bash

# Nginx日志文件的路径
LOG_DIR="/var/log/nginx/"
ACCESS_LOG="${LOG_DIR}access.log"
ERROR_LOG="${LOG_DIR}error.log"

# 日志文件备份的前缀
BACKUP_PREFIX="bak_"

# 获取当前日期,并格式化为YYYYMMDD
CURRENT_DATE=$(date +%Y%m%d)

# 创建备份的日志文件
mv "${ACCESS_LOG}" "${LOG_DIR}${BACKUP_PREFIX}${CURRENT_DATE}_access.log"
mv "${ERROR_LOG}" "${LOG_DIR}${BACKUP_PREFIX}${CURRENT_DATE}_error.log"

# 通知Nginx重新打开日志文件(可选,如果Nginx配置了log_rotate指令,这一步可能不需要)
# kill -USR1 $(cat /var/run/nginx.pid)

# 可以在这里添加额外的日志清理逻辑,比如删除旧的备份文件
# find ${LOG_DIR} -type f -name "bak_*.log" -mtime +7 -exec rm {} \;

echo "Nginx日志已成功切割并备份。"

将上面的脚本保存到一个文件中,比如叫做`nginx_log_rotate.sh`,然后给这个文件执行权限:


chmod +x nginx_log_rotate.sh

你可以通过Cron作业来定期执行这个脚本,以实现日志的自动切割。例如,要每天凌晨1点执行,可以添加以下Cron作业:


0 1 * * * /path/to/nginx_log_rotate.sh

请将`/path/to/`替换为你的脚本实际所在的路径。