You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

logrotate轮转后pure-ftpd长连接日志写入旧文件问题如何修复?

解决方案

方案1:配置logrotate发送HUP信号重载日志(推荐)

Pure-FTPd对SIGHUP信号的处理逻辑就是重新打开日志文件句柄,不会断开任何活跃的FTP连接,完全符合你的需求。你只需要修改/etc/logrotate.d/pureftpd的配置如下:

/var/log/pureftpd.log {
    weekly
    notifempty
    missingok
    postrotate
        /bin/kill -HUP `cat /var/run/pure-ftpd.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

说明:

  • 脚本会在日志文件重命名完成后,给pure-ftpd主进程发送HUP信号,让它重新打开新的/var/log/pureftpd.log文件写入后续日志
  • 信号只会发给主进程,所有子进程持有的活跃FTP连接不受任何影响,不会触发客户端断开
  • 如果你的pure-ftpd pid文件路径不同,替换为实际路径即可,常见路径还有/run/pure-ftpd.pid

方案2:使用copytruncate参数(无侵入备选)

如果你不想调整进程信号逻辑,可以直接在logrotate配置里加copytruncate参数:

/var/log/pureftpd.log {
    weekly
    notifempty
    missingok
    copytruncate
}

说明:

  • 该参数的逻辑是:不重命名原日志文件,先把原日志的内容拷贝到轮转后的归档文件,再直接清空原日志文件
  • pure-ftpd始终持有原文件的句柄,不需要做任何调整,不会断开连接
  • 缺点是拷贝和清空之间的极短时间窗口内产生的日志可能丢失,对日志完整性要求极高的场景优先选方案1

验证方法

配置修改后可以手动执行一次日志轮转测试是否生效:
logrotate -f /etc/logrotate.d/pureftpd
执行后查看新生成的/var/log/pureftpd.log是否有新的日志写入,同时检查活跃的FTP连接是否正常即可。

内容的提问来源于stack exchange,提问作者Martin Tomko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:45:00