我有/var/log/syslog/YYYY-MM-DD/file.log文件的日志。 新的目录是由rsyslog自动创build的,日志会自动放到新的位置。
每天,我将日志的前一天存档到另一个目录,因此,除了5分钟的时间,/ var / log / syslog /中只有一个子目录。
在此基础上,我使用了以下的fail2ban规则:
logpath = /var/log/syslog/*/auth.log
哪个工作。 直到午夜,fail2ban仍然在“监听”以前的日志。 我可以重新加载fail2banconfiguration,但这使我失去了现有的禁令。
所以问题是 – 可以做什么使fail2ban切换到新的日志,而不会丢失现有的禁令?
我也尝试使符号链接/ var / log / syslog /今天指向当前日志,并将fail2ban指向/var/log/syslog/today/auth.log,但后来我得到了日志:
Jan 8 00:05:46 xxxx fail2ban.filter : ERROR Unable to open /var/log/syslog/today/auth.log Jan 8 00:05:46 xxxx fail2ban.filter : ERROR [Errno 2] No such file or directory: '/var/log/syslog/today/auth.log' Traceback (most recent call last): File "/usr/share/fail2ban/server/filter.py", line 491, in getFailures has_content = container.open() File "/usr/share/fail2ban/server/filter.py", line 569, in open self.__handler = open(self.__filename) IOError: [Errno 2] No such file or directory: '/var/log/syslog/today/auth.log'
这可能是因为auth.log直到几分钟后才创build。
但任何方式 – fail2banlogging了这个错误coupld的时代,然后没有监控任何东西(不禁止任何东西)
编辑当你启动fail2ban时,它会打开文件句柄到当前所看到的所有auth文件。 它不会继续扫描目录以查看是否有新文件出现。 使用符号链接不起作用,因为符号链接是旧的inode,而不是新的。
最简单的解决scheme是添加第二个单独的authlog文件,该文件仅由fail2ban使用。 你可以每半夜清空它,以避免它变得太大。
原来的答案问题是,fail2ban第一次启动时打开属于该文件名的inode / filehandle。 一旦文件被打开,它不检查更改,所以当文件被移动时,它的文件句柄停止工作。
解决scheme是根本不移动文件。 而是将其内容复制到新文件,然后清空旧文件。 你还没有说过旋转是如何完成的,但是大部分的旋转包都可以select复制而不是移动。