我每天都会轮换 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