logrotate + rsync + 定时任务可实现Nginx日志自动轮转与同步:在/etc/logrotate.d/nginx中配置daily轮转、rotate 30、compress等规则,利用sharedscripts和postrotate调用ossutil/coscli/aws-cli上传至对象存储,配合MD5校验、sha256摘要、-v日志记录及退出码告警,确保权限、路径、时机可靠。

直接用 logrotate + rsync + 定时任务 组合就能实现,无需重写脚本或引入复杂采集工具。关键在轮转后立刻触发同步,且确保权限、网络和存储路径可靠。
配置 logrotate 触发同步动作
在 /etc/logrotate.d/nginx 中定义轮转规则,并利用 postrotate 执行上传逻辑:
- 确保 Nginx 日志路径明确,例如
/usr/local/nginx/logs/*.log - 添加
sharedscripts和postrotate块,避免多次调用 - 在
postrotate中调用 rsync 或 curl 命令上传到对象存储(如阿里云 OSS、腾讯云 COS、AWS S3)
适配主流对象存储的上传方式
不同云厂商提供轻量 CLI 工具,比自写 HTTP 请求更稳定:
-
阿里云 OSS:安装 ossutil,用
ossutil cp /path/to/log.tar.gz oss://my-bucket/nginx-logs/ --update -
腾讯云 COS:安装 coscli,命令类似
coscli cp local.log cos://my-bucket/nginx-logs/ -
AWS S3:使用 aws-cli,
aws s3 cp log.tar.gz s3://my-bucket/nginx-logs/ - 所有工具均支持断点续传、MD5 校验、并发上传,建议启用
--include md5或--enable-md5
保证同步可靠性与可追溯性
历史日志不是“传完就了事”,需留痕、防丢、可验证:
- 上传前对归档包做
sha256sum并保存摘要文件,一并上传 - rsync 或 CLI 命令加
-v参数,将输出重定向到本地日志,如/var/log/nginx-sync.log - 在 postrotate 中检查上传退出码,非零时写入告警(例如用 logger 记系统日志)
- 对象存储开启服务端加密(SSE)和版本控制,防止误删或篡改
补充建议:避免常见坑
很多失败源于权限、路径或时机问题:
- Nginx 进程用户(如 nginx)通常无权执行 rsync 或 CLI 工具——统一用 root 用户运行 logrotate(默认如此)
- 不要在
postrotate中直接压缩日志,logrotate 自带compress,重复操作易冲突 - 若用定时脚本替代 logrotate,务必在 mv 后执行
kill -USR1,否则新日志仍写入旧文件 - 对象存储 bucket 的 region 和 endpoint 要配对,内网地址优先(如 oss-cn-hangzhou-internal.aliyuncs.com)


















