SWATCH - o que estou fazendo errado?

2

O que eu quero / preciso / desejo é registrar quando um usuário faz login no meu servidor FTP.

Problema: não consigo fazer o trabalho de amostra do jeito que eu deveria ser capaz.

Esses dados são registrados em um arquivo - mas é claro que esses logs não são mantidos por muito tempo. Não consigo manter os logs para sempre, mas posso extrair dados a partir de então, analisá-los, armazenar os resultados em outro lugar.

Se houver uma maneira melhor de fazer isso do que o seguinte, sou todo ouvidos.

Versão da amostra 3.2.3

Perl 5.12

FTP: VSFTP

SO (teste): OS X 10.6.8

SO (Produção): Solaris

Do homem eu vejo que posso passar o conteúdo para um comando .. então eu deveria ser capaz de ecoar os valores para o arquivo, fazer uma coisa sed / cut / uniq sobre eles para as estatísticas.

$ 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.

Arquivo de amostras .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"

Inicie com

$ swatch -c /Users/bdunbar/.swatchrc --script-dir /Users/bdunbar/dev/ftplog -t /Users/bdunbar/dev/ftplog/vsftpd.log &

Teste

echo "Mon July  9 03:11:07 2012 [pid 14938] [aetech] OK LOGIN: Client "206.209.255.227"" >>  vsftpd.log

Resultados - está ecoando em TTY. Isso não é necessário ou desejado no servidor, mas me diz que as coisas estão funcionando.

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

Resultados - mal! Parece que não estou enviando as variáveis para o texto.

$ tail -f output.txt
0: /Users/bdunbar/dev/ftplog/.swatch_script.25780 1: 2: 3: 4: 5:
    
por Brian Dunbar 09.07.2012 / 22:41

3 respostas

2

A resposta: a página de manual está errada.

Variável para 'linha inteira' é $ _

Então, isso irá ecoar toda a linha para o terminal.

#.swatchrc
watchfor /OK LOGIN/
      exec echo $_

Também é possível enviar para email ou, no meu caso, para um arquivo para análise posterior.

    
por 11.07.2012 / 17:35
1

Eu sei que isso pode ser tarde, mas eu tive o mesmo problema e encontrei o motivo. Você deve usar grupos de captura na expressão regular (é para isso que os números se referem).

Exemplo:

/OK LOGIN: Client (.*)/

$1 representará o endereço IP do cliente no seu exemplo.

    
por 04.06.2017 / 22:39
0

Você está citando a parte exec da página man, mas está usando realmente o comando 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.

Portanto, altere o pipe para exec e, pelo que entendi, ele deve funcionar.

    
por 09.07.2012 / 23:51

Tags