登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
Nginx日志按天切割、压缩,并自动清理 30 天前的旧日志 ...
Nginx日志按天切割、压缩,并自动清理 30 天前的旧日志文件
[ 复制链接 ]
梢疠
2025-6-9 14:29:28
以下是一个完整的 Shell 脚本,用于实现 Nginx 日志按天切割、压缩,并自动清理 30 天前的旧日志文件。
脚本内容
#!/bin/bash
# 定义日志目录
LOG_DIR="/var/log/nginx" # Nginx 日志目录
DAYS_TO_KEEP=30 # 保留最近多少天的日志
# 检查日志目录是否存在
if [ ! -d "$LOG_DIR" ]; then
echo "错误:日志目录 $LOG_DIR 不存在!"
exit 1
fi
# 获取昨天的日期(用于日志切割)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
# 切割日志文件
if [ -f "$LOG_DIR/access.log" ]; then
mv "$LOG_DIR/access.log" "$LOG_DIR/access_$YESTERDAY.log"
fi
if [ -f "$LOG_DIR/error.log" ]; then
mv "$LOG_DIR/error.log" "$LOG_DIR/error_$YESTERDAY.log"
fi
# 向 Nginx 主进程发送 USR1 信号,重新打开日志文件
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid)
fi
# 压缩昨天的日志文件
if [ -f "$LOG_DIR/access_$YESTERDAY.log" ]; then
gzip "$LOG_DIR/access_$YESTERDAY.log"
fi
if [ -f "$LOG_DIR/error_$YESTERDAY.log" ]; then
gzip "$LOG_DIR/error_$YESTERDAY.log"
fi
# 清理 30 天前的旧日志文件
find "$LOG_DIR" -type f -name "access_*.log.gz" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
find "$LOG_DIR" -type f -name "error_*.log.gz" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
# 记录操作日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - 日志已切割、压缩并清理完成。" >> "$LOG_DIR/nginx_log_cleanup.log"
复制代码
脚本说明
日志目录
LOG_DIR 定义了 Nginx 日志文件的存储目录,默认是 /var/log/nginx。你可以根据实际路径修改。
日志切割
脚本会将当前的 access.log 和 error.log 文件重命名为 access_YYYY-MM-DD.log 和 error_YYYY-MM-DD.log,其中 YYYY-MM-DD 是前一天的日期。
通过向 Nginx 主进程发送 USR1 信号,通知 Nginx 重新打开日志文件。
日志压缩
使用 gzip 命令将切割后的日志文件压缩为 .gz 格式,以节省磁盘空间。
日志清理
使用 find 命令查找并删除 30 天前的旧日志文件(文件名格式为 access_*.log.gz 和 error_*.log.gz)。
操作日志
每次运行脚本时,会将操作记录到 nginx_log_cleanup.log 中,方便后续查看。
使用方法
将脚本保存为文件,例如 /usr/local/bin/rotate_compress_clean_nginx_logs.sh。
赋予脚本执行权限:
chmod +x /usr/local/bin/rotate_compress_clean_nginx_logs.sh
复制代码
手动运行脚本测试:
/usr/local/bin/rotate_compress_clean_nginx_logs.sh
复制代码
如果需要每天自动运行,可以将脚本添加到 crontab 中。例如,每天凌晨 0 点运行:
crontab -e
复制代码
添加以下内容:
0 0 * * * /usr/local/bin/rotate_compress_clean_nginx_logs.sh
复制代码
注意事项
权限问题
确保脚本以具有足够权限的用户(如 root)运行,否则可能无法删除、重命名或压缩日志文件。
测试
在生产环境中运行之前,建议先在测试环境中验证脚本的正确性。
日志轮换
如果已经配置了 logrotate 来管理 Nginx 日志,请确保脚本与 logrotate 的配置不冲突。
备份
如果需要保留某些重要日志,可以在删除前备份到其他位置。
压缩文件格式
脚本使用 gzip 压缩日志文件,压缩后的文件格式为 .gz。如果需要其他格式(如 .zip),可以修改脚本中的压缩命令。
通过这个脚本,你可以实现 Nginx 日志按天切割、压缩并自动清理旧日志,有效管理磁盘空间并保留必要的日志记录。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
日志
Nginx
按天
切割
压缩
相关帖子
笨功夫------再论日志的重要性
应急响应-日志分析
精控Spring AI日志
Java 日志管理的黄金组合: SLF4J+Logback
记录---图文并茂讲解nginx中http升级https(部署SSL证书)知识点总结
编译安装nginx
从 0 到 1 实现高性能日志库 MiniSpdlog — 这可能是最适合新手的日志系统实战项目 !
Nginx的ngx_thread_pool模块解析:提升性能与可伸缩性
nginx证书缓存功能
Nginx 缓存的工作原理
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
笨功夫------再论日志的重要性
0
1019
表弊捞
2025-09-28
业界
应急响应-日志分析
4
32
山真柄
2025-10-01
业界
精控Spring AI日志
0
74
墨佳美
2025-10-05
业界
Java 日志管理的黄金组合: SLF4J+Logback
1
791
迭婵椟
2025-10-06
代码
记录---图文并茂讲解nginx中http升级https(部署SSL证书)知识点总结
0
116
甄婉丽
2025-10-11
安全
编译安装nginx
0
399
坠矜
2025-10-13
业界
从 0 到 1 实现高性能日志库 MiniSpdlog — 这可能是最适合新手的日志系统实战项目 !
0
1010
滑清怡
2025-10-14
安全
Nginx的ngx_thread_pool模块解析:提升性能与可伸缩性
1
261
云卦逾
2025-10-16
业界
nginx证书缓存功能
0
383
梁丘艷蕙
2025-10-17
安全
Nginx 缓存的工作原理
0
700
雨角
2025-10-17
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
梢疠
2025-6-9 14:29:28
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
dage888
999994
3934307807
992122
4
富账慕
9983
5
邹语彤
9982
6
刎唇
9993
7
匝抽
9986
8
聚怪闩
9960
9
孙淼淼
9977
10
烯八
9954
查看更多