ファイルサイズまたは行数が変更されたときに、fail2banログからすべての新しい行を読み取りたい。fail2banログの新しい行だけを指定されたチャネルに出力したい。
私は試してみます:
bind time - * checklogs
set kanal "#logzzz"
set logf2b "/var/log/fail2ban.log"
proc linecount {file} {
set i 0
set fid [open $file r]
while {[gets $fid line] > -1} {incr i}
close $fid
return $i
}
set oldlines [linecount $logf2b]
set filesize [file size $logf2b]
proc checklogs {min hour day mon year} {
global kanal oldlines logf2b filesize
if {[file size $logf2b] != $filesize} {
set newfile [open $logf2b "r"]
while {1} {
set line [gets $newfile $oldlines]
if {[eof $newfile]} {
close $newfile
break
}
putserv "PRIVMSG $kanal :Fail2Ban $line"
}
} else { putserv "PRIVMSG $kanal :No new fail2ban logs!" }
}
しかし、動作しません:/
解決策や作り方の説明はありますか?