SWATCH-我做错了什么?

SWATCH-我做错了什么?

我想要/需要/渴望的是当用户登录我的 FTP 服务器时进行记录。

问题:我无法让 Swatch 按照我应该的方式工作。

这些数据被记录到文件中 - 但这些日志当然不会保存很长时间。我无法永远保留这些日志,但我可以从中提取数据,对其进行分析,并将结果存储在其他地方。

如果有比以下更好的方法,我洗耳恭听。

Swatch 版本 3.2.3

Perl 5.12

FTP:VSFTP

操作系统(测试):OS X 10.6.8

操作系统(生产):Solaris

从 man 上看我可以将内容传递给命令..所以我应该能够将这些值回显到文件中,对它们执行 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:

答案1

答案:手册页有误。

“整行”的变量是 $_

因此这将把整行回显到终端。

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

也可以将其发送到电子邮件,或者像我的情况那样发送到文件以供进一步分析。

答案2

我知道这可能有点晚了,但我遇到了同样的问题并找到了原因。您必须在正则表达式中使用捕获组(这就是数字所指的)。

例子:

/OK LOGIN: Client (.*)/

$1将代表示例中的客户端 IP 地址。

答案3

您引用了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.

因此,根据我的理解,将其更改为,pipeexec应该可以工作。

相关内容