Я хочу / хочу / хочу регистрироваться, когда пользователь входит на мой FTP-сервер.
Проблема: я не могу заставить образец работать так, как должен.
Эти данные записываются в файл, но, конечно, эти журналы хранятся недолго. Я не могу хранить журналы вечно, но я могу извлекать из них данные, анализировать их, сохранять результаты где-нибудь еще.
Если есть лучший способ сделать это, чем описанный ниже, я все слышу.
Образец версии 3.2.3
Perl 5.12
FTP: VSFTP
ОС (тестовая): OS X 10.6.8
ОС (Производство): Solaris
От человека я вижу, что могу передать содержимое команде ... поэтому я должен иметь возможность отображать эти значения в файл, делать с ними что-то sed / cut / uniq для статистики.
$ man swatch
(snip)
exec command
Execute command. The command may contain variables which
are substituted with fields from the matched line. A $N
will be replaced by the Nth field in
the line. A $0 or $* will be replaced by the entire line.
Файл образца .swatchrc
watchfor /OK LOGIN/
echo=red
pipe "echo "0: $0 1:$1 2:$2 3:$3 4:$4 5:$5" >> /Users/bdunbar/dev/ftplog/output.txt"
Запустить с
$ swatch -c /Users/bdunbar/.swatchrc --script-dir /Users/bdunbar/dev/ftplog -t /Users/bdunbar/dev/ftplog/vsftpd.log &
Тест
echo "Mon July 9 03:11:07 2012 [pid 14938] [aetech] OK LOGIN: Client "206.209.255.227"" >> vsftpd.log
Результаты - это перекликается с TTY. Это не нужно и не желательно на сервере, но это говорит мне, что что-то работает.
ftplog
*** swatch version 3.2.3 (pid:25780) started at Mon Jul 9 15:23:33 CDT 2012
Mon July 9 03:11:07 2012 [pid 14938] [aetech] OK LOGIN: Client 206.209.255.227
Результаты - плохие! Кажется, я не отправляю переменные в текст.
$ tail -f output.txt
0: /Users/bdunbar/dev/ftplog/.swatch_script.25780 1: 2: 3: 4: 5:
Ответ: страница руководства неверна.
Переменная для "всей строки": $ _
Таким образом, это отобразит всю строку на терминал.
#.swatchrc
watchfor /OK LOGIN/
exec echo $_
Можно также отправить это по электронной почте или, в моем случае, в файл для дальнейшего анализа.
Я знаю, что это может быть поздно, но у меня была та же проблема, и я нашел причину. Вы должны использовать группы захвата в регулярном выражении (это то, что обозначают числа).
Пример:
/OK LOGIN: Client (.*)/
$1
будет представлять IP-адрес клиента в вашем примере.
Вы цитируете exec
часть справочной страницы, но на самом деле вы используете pipe
команда.
pipe command[,keep_open]
Pipe matched lines into command. Use the keep_open option to force
the pipe to stay open until a different pipe action is run or until
swatch exits.
Так что измените pipe
к exec
и, по моему мнению, это должно работать.