使用 logrotate 自动切割Openvpn日志 下面给你一套 在生产环境可直接使用、不会中断 OpenVPN 服务、无日志丢失风险 的安全日志分割方案,适用于 Ubuntu/Debian/CentOS 等绝大多数系统。 ✅ 一、最推荐方式:使用 logrotate 自动切割(安全、不重启、不丢日志) OpenVPN 默认使用 syslog 或直接写文件,都可以用 logrotate 来切割。 1. 创建 OpenVPN 日志轮转配置 创建文件: sudo nano /etc/logrotate.d/openvpn 写入以下内容(可直接复制): /var/log/openvpn/openvpn.log { daily rotate 7 missingok notifempty compress delaycompress create 640 root adm postrotate # 让 OpenVPN 重新打开日志文件 (不会重启 VPN 服务) if pidof openvpn >/dev/null; then kill -USR1 $(pidof openvpn) fi endscript } 🔍 配置说明 配置项 含义 daily 每天分割一次 rotate 7 保留 7 天日志 compress Gzip 压缩旧日志 delaycompress 延迟一天再压缩,避免影响写入 kill -USR1 $(pidof openvpn) 让 OpenVPN 重新打开日志文件(不会重启) USR1 是 OpenVPN 官方推荐的 安全 reopen-log 信号,不会影响连接。 2. 手动立即触发一次切割 这样可以测试是否生效: sudo logrotate -f /etc/logrotate.d/openvpn 切割后你会看到: /var/log/openvpn/openvpn.log /var/log/openvpn/openvpn.log.1.gz ✅ 二、确认 OpenVPN 的 log 文件是否允许切割 检查 OpenVPN 配置: grep -E "log|status" /etc/openvpn/*.conf 你应看到: log /var/log/openvpn/openvpn.log 如果配置里启用了 log-append ,也没问题: log-append /var/log/openvpn/openvpn.log logrotate 依旧能安全切割。 ⚠️ 三、不要使用 rm /truncate 强制清空(会导致服务日志失效) 以下危险操作千万不要做: echo "" > /var/log/openvpn/openvpn.log rm openvpn.log 因为: OpenVPN 仍会写入旧的文件描述符 会导致日志不再更新 有时会令 debug 无法进行 除非你同时发 USR1 信号让其 reopen。 🔧 四、如果你想立即安全清空日志 先切割,再通知 OpenVPN 重新打开文件: sudo mv /var/log/openvpn/openvpn.log /var/log/openvpn/openvpn.log.bak sudo kill -USR1 $(pidof openvpn) 此后 openvpn.log 会重新生成(0 字节),100% 安全。 🧾 五、如果日志增长异常快,该检查什么? 常见原因: 原因 解决办法 客户端频繁重连 检查网络、证书有效期 配置开启了 verb 6~9 超详细日志 调低: verb 3 DoS 攻击/暴力扫描 设置防火墙、fail2ban 报错:TLS Error / Authenticate failed 检查证书、时间同步 建议查看最新 20 行日志: tail -f /var/log/openvpn/openvpn.log 🎯 如需,我可以帮你: ✔ 优化你的 OpenVPN 配置 ✔ 根据现网日志判断是否被攻击 ✔ 配置 fail2ban 保护 OpenVPN ✔ 优化日志级别(verb)减少磁盘写入 如果你愿意,把你当前的 openvpn.conf 或 server.conf 发我,我可以帮你进一步做最优配置。 你现在遇到的报错原因非常明确: ❌ OpenVPN 2.6 已经移除了 log-rotate 选项 你的错误日志: Options error: Unrecognized option ... log-rotate (2.6.14) 这就是 OpenVPN 2.6 版本(Ubuntu 24.04 默认)不再支持 log-rotate 的结果。 🎯 根因:你加了 log-rotate 0,但 OpenVPN 2.6 不支持该指令 因此: ✔ openvpn 启动失败 ✔ 客户端无法连接 ✔ 日志不断被 truncate(因为进程一直在崩溃重启) ✅ 正确方式(OpenVPN 2.6) OpenVPN 2.6 已经废弃所有日志轮转选项 ,包括: log-rotate mute-replay-warnings 部分 suppress-timestamps 行为变化 OpenVPN 官方建议: ✔ 日志轮转只能靠 logrotate,不再由 OpenVPN 自己处理 ⭐ 正确配置(最终版) 请把 /etc/openvpn/server.conf 中删除该行: log-rotate 0 并保留: log-append /var/log/openvpn/openvpn.log 这是 OpenVPN 2.6 唯一推荐的日志配置。 ⭐ 正确的 logrotate(最终版) /etc/logrotate.d/openvpn 保持: /var/log/openvpn/openvpn.log { daily rotate 7 missingok notifempty compress delaycompress create 640 root adm sharedscripts postrotate if pidof openvpn >/dev/null; then kill -HUP $(pidof openvpn) fi endscript } ⭐ 重启 OpenVPN(你使用的是 SysV init,不是 systemd) 执行: /etc/init.d/openvpn restart 实际使用 systemctl restart openvpn 确认是否成功: ps aux | grep openvpn tail -f /var/log/openvpn/openvpn.log 你应该看到: Initialization Sequence Completed 表示服务已恢复。 ⭐ 现在检查客户端连接 一旦服务启动正常,OpenVPN 客户端应该可以重新连接。 🔍 如果你愿意,我可以帮你进一步优化 你可发我: cat /etc/openvpn/server.conf 我可以帮你清理所有不兼容 2.6 的旧参数(常见问题)。