梢疠 发表于 2025-6-9 14:29:28

Nginx日志按天切割、压缩,并自动清理 30 天前的旧日志文件

以下是一个完整的 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 日志按天切割、压缩并自动清理旧日志,有效管理磁盘空间并保留必要的日志记录。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

创蟀征 发表于 2025-11-2 04:35:06

用心讨论,共获提升!

谭皎洁 发表于 2025-11-10 00:47:43

这个好,看起来很实用

阴昭昭 发表于 2025-11-10 21:57:33

收藏一下   不知道什么时候能用到

狞嗅 发表于 2025-11-30 01:07:18

感谢分享,下载保存了,貌似很强大

晌集涟 发表于 2025-12-6 15:00:06

前排留名,哈哈哈

饮邺谲 发表于 2025-12-8 21:57:25

谢谢分享,辛苦了

百里宵月 发表于 2025-12-9 12:21:13

新版吗?好像是停更了吧。

热琢 发表于 2025-12-15 06:14:57

懂技术并乐意极积无私分享的人越来越少。珍惜

湛恶 发表于 2025-12-17 14:40:01

这个好,看起来很实用

赶塑坠 发表于 2025-12-21 17:18:39

很好很强大我过来先占个楼 待编辑

韩素欣 发表于 2025-12-28 21:10:26

感谢,下载保存了

钿稳铆 发表于 2026-1-9 19:45:22

感谢分享,下载保存了,貌似很强大

滥眩 发表于 2026-1-9 21:35:13

感谢分享,下载保存了,貌似很强大

撵延兵 发表于 2026-1-14 17:35:42

谢谢分享,试用一下

蝙俚 发表于 2026-1-18 05:07:16

谢谢分享,辛苦了

嗣伐 发表于 2026-1-18 14:15:19

懂技术并乐意极积无私分享的人越来越少。珍惜

扒钒 发表于 2026-1-19 09:22:49

感谢分享,下载保存了,貌似很强大

皮仪芳 发表于 2026-1-21 01:33:42

前排留名,哈哈哈

乐敬 发表于 2026-1-21 10:52:00

喜欢鼓捣这些软件,现在用得少,谢谢分享!
页: [1] 2 3
查看完整版本: Nginx日志按天切割、压缩,并自动清理 30 天前的旧日志文件