nginx日志切割脚本分享


下面是一个简单的用于切割Nginx日志的Shell脚本示例。这个脚本基于`logrotate`的配置风格,但如果你只是想通过脚本来实现而不想使用`logrotate`,下面是一个手动执行的脚本示例。请注意,对于生产环境,建议使用`logrotate`,因为它提供了更丰富的特性和更好的错误处理。


#!/bin/bash

# Nginx日志文件位置,根据实际情况修改
NGINX_LOG_DIR="/var/log/nginx"
NGINX_ACCESS_LOG="$NGINX_LOG_DIR/access.log"
NGINX_ERROR_LOG="$NGINX_LOG_DIR/error.log"

# 日志备份目录,根据实际情况修改
BACKUP_DIR="/var/log/nginx/backup"

# 如果备份目录不存在,则创建
[ ! -d "$BACKUP_DIR" ] && mkdir -p "$BACKUP_DIR"

# 切割access日志
mv "$NGINX_ACCESS_LOG" "${BACKUP_DIR}/access.$(date +%Y%m%d%H%M%S).log"
# 通知Nginx重新打开日志文件(这一步在手动脚本中可能需要重启Nginx服务或发送USR1信号给Nginx主进程)
# 重启Nginx(注意:这可能会导致短暂的服务中断)
# systemctl restart nginx
# 或者,向Nginx主进程发送USR1信号(推荐方式,不会引起服务中断)
# kill -USR1 $(cat /var/run/nginx.pid)

# 切割error日志(同理)
mv "$NGINX_ERROR_LOG" "${BACKUP_DIR}/error.$(date +%Y%m%d%H%M%S).log"
# 同样地,通知Nginx重新打开日志文件

echo "Nginx日志已切割并备份到$BACKUP_DIR"

**注意**:

- 脚本中的`NGINX_LOG_DIR`和`BACKUP_DIR`需要根据你的实际情况进行修改。

- 在手动脚本中,我们简单地使用了`mv`命令来“切割”日志。然而,在真正的生产环境中,你应该使用`logrotate`或类似工具,因为它们提供了更复杂的日志管理策略,比如保留旧日志的数量、压缩旧日志等。

- 脚本中的`# systemctl restart nginx`和`# kill -USR1 $(cat /var/run/nginx.pid)`是被注释掉的,你需要根据你的需求选择一种方式来通知Nginx重新打开日志文件。重启Nginx会导致短暂的服务中断,而发送USR1信号则不会。

- 请确保脚本具有执行权限,你可以通过运行`chmod +x your_script_name.sh`来赋予权限。

- 在实际部署之前,请在一个安全的测试环境中测试脚本。