pure-ftpd 登录到滚动日志文件 (logrotate.d)

pure-ftpd logs into rolled log file (logrotate.d)

我们有一个相当大的系统,它依赖于 FTP 消息传递。 /var/log/pureftpd.log 正在监视以响应特定操作。

目前,我注意到一个有趣的问题,pure-ftpd 正在将新事件记录到旧日志文件中,例如 (pureftpd.log.1).

这种情况发生在 FTP 连接打开很长时间的情况下。当 logrotate 通过重命名旧日志来旋转日志文件时。似乎当前活动的 FTP 连接仍链接到旧文件,所有事件都写在那里。这将在 FTP 客户端重新连接后得到修复。

此行为使 pureftpd 监视无法注册某些事件。

如何使用 logrotate.d 或其他方式修复它以确保所有新事件始终写入正确的日志文件而无需重新连接 ftp 客户端?

pure-ftpd 是 运行 默认设置和 logrotate 配置如下:

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

感谢您的任何推荐:)

这是打开文件描述符进行写入的进程的常见行为; logrotate 不处理这些打开的句柄,因此它们将 'follow' 连同新旋转的文件。因此你看到的行为。

我假设您必须在旋转文件后重新加载或重新启动 pure-ftpd 守护程序本身,例如假设 systemd:

postrotate
    systemctl reload pure-ftpd > /dev/null
endscript

我不知道这是否会终止您的所有连接。但这就是您所看到的行为的来源。