fail2ban:11 行必须以关键字或文件名开头(可能用双引号)

fail2ban:11 行必须以关键字或文件名开头(可能用双引号)

我每天都会轮换 Fail2Ban 服务的日志,但是,我每天都会收到此错误:

/etc/cron.daily/logrotate:
error: fail2ban:11 lines must begin with a keyword or a filename (possibly in double quotes)

这是我的/etc/cron.daily/logrotate file

#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

这是我的第 11 行:

mv status.clean status

根据错误,这一行有错误。我似乎不明白这行文件到底出了什么问题?

这是我的/etc/logrotate.d/fail2ban文件:

/var/log/fail2ban.log {
    monthly
    rotate 13
    compress
    delaycompress
    missingok
    notifempty
    postrotate
    fail2ban-client flushlogs 1>/dev/null
    endscript
    640 fail2ban adm
    create 640 root adm
}

答案1

该错误消息不是来自 shell 脚本,而是来自 logrotate。这是 logrotate 配置文件的第 11 行fail2ban,而不是 cron.daily 脚本的第 11 行。

看起来您在编辑 logrotate 配置文件时犯了一个错误;第 11 行是640 fail2ban adm——这确实不是一个有效的东西。也许您的意思是将其作为create下面一行的一部分?

我检查了运行fail2ban的Debian Jessie机器上的配置文件,它看起来像这样:

/var/log/fail2ban.log {

    weekly
    rotate 4
    compress

    delaycompress
    missingok
    postrotate
        fail2ban-client flushlogs 1>/dev/null
    endscript

    # If fail2ban runs as non-root it still needs to have write access
    # to logfiles.
    # create 640 fail2ban adm
    create 640 root adm
}

...所以确实应该在它前面创建(并且两者之一应该被注释掉/删除)。

答案2

该错误告诉您配置的第 11 行有错误。不是 logrotate 脚本的第 11 行。

640 fail2ban adm

相关内容