Назад | Перейти на главную страницу

SWATCH - что я делаю не так?

Я хочу / хочу / хочу регистрироваться, когда пользователь входит на мой 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 и, по моему мнению, это должно работать.