nginx按日切割日志
一、核心解决方案:使用 logrotate 工具
这是最标准、维护成本最低的方案,也是绝大多数 Linux 生产环境的选择。
1. 创建或编辑配置文件
通常,我们为 Nginx 单独创建一个配置文件。使用你喜欢的编辑器(如 vim)打开以下文件:
|
1 |
|
2. 添加配置内容
将以下配置内容复制进去。这是一个通用的配置模板,已包含详细说明
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
解释说明:1、“/var/log/nginx/*.log”这个需要替换为对应nginx所在目录位置与日志文件,*.log表示以.log结尾的文件均做切割。
2、“/var/run/nginx.pid”这个需要替换为对应nginx进程文件。
3、核心信号:kill -USR1 这条命令是核心,作用是让 Nginx 优雅地关闭旧日志文件并创建新的开始写入,整个过程服务不会中断。
4、用户权限:如果服务器上 Nginx 运行用户不是 nginx(比如是 www-data),记得把 create 行里的 nginx nginx 改成对应的用户名和组名。
3. 检查和测试
在配置生效前,建议先测试一下确保配置没有问题。
- 测试(Debug)模式:该命令会模拟运行,告诉你它会做什么,但不实际执行。
|
1 |
|
- 强制执行:如果你想立即看效果,可以强制运行一次。
|
1 |
|
-
执行后,你可以去
/var/log/nginx/目录下查看,应该会看到旧的日志被重命名为类似access.log-20260509.gz的文件,并且新的access.log文件已经生成。
4. 自动化
不用担心,logrotate 安装后会由系统的 cron 定时任务(通常在 /etc/cron.daily/)每天自动调用一次,无需你再做任何额外配置。
二、备选方案:自定义脚本 + Crontab
如果你希望对日志有更精细的控制(比如需要特殊命名规则),可以自己写 Shell 脚本,并通过 crontab 定时执行。
-
脚本示例 (
/usr/local/bin/cut_nginx_log.sh):
|
1 2 3 4 5 6 7 8 9 10 |
|
- 添加定时任务:通过
crontab -e命令添加一条定时任务,让脚本每天凌晨 0 点执行
|
1 |
|
- 优缺点对比:这种方案虽然更灵活,但需要自己维护脚本和定时任务的可靠性。对于大多数场景,
logrotate是更省心的选择。
三、总结建议
| 方案 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
logrotate | 系统自带、配置简单、自动化、稳定可靠 | 灵活性相对较低 | 所有通用场景,强烈推荐 |
| 自定义脚本 | 高度灵活,可完全自定义命名和行为 | 需手动维护脚本和定时任务,有出错可能 | 有复杂定制需求的特殊场景 |
更多推荐

所有评论(0)