我想要/需要/渴望的是当用户登录我的 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.
因此,根据我的理解,将其更改为,pipe
它exec
应该可以工作。