【发布时间】:2012-02-05 10:31:24
【问题描述】:
在确定(当然是通过 SO)错误的 $ftp = Net::FTP->new() 调用的错误在 $@ 中,而后续错误可以通过 $ftp->message() 获得后,我遇到了一个小问题。
我的代码基本上是:
while (1) {
# Wait for cycle start, then get file list into @filelist.
foreach $file (@filelist) {
my $ftp = Net::FTP->new ($host);
if (! $ftp) {
logError ("Could not connect to host [$host]: $@");
return;
}
# More FTP stuff below with $ftp->message() error checking.
$ftp->quit();
}
}
除此之外:是的,我知道我可能可以在一个 FTP 会话中执行此操作,但目前有充分的理由将其留在单独的会话中。
现在这是在一个循环中调用的,每个文件一次,都转到同一个主机,但在大多数循环中,我在第一次尝试时得到的行为略有不同。该脚本是一个长时间运行的脚本,每个周期从一个小时半小时开始,因此程序启动后的第一次尝试不是问题,因为它也发生在第一次以外的周期上。
现在我知道这些连接应该会失败,仅仅是因为我尝试访问的机器在我的开发网络上不可用。
麻烦的是日志文件中出现的错误是:
E 2012-02-05 18:00:13 Could not connect to host [example.com]:
E 2012-02-05 18:00:13 Could not connect to host [example.com]:
Net::FTP: connect: Connection refused
E 2012-02-05 18:00:14 Could not connect to host [example.com]:
Net::FTP: connect: Connection refused
如您所见,$@ 变量似乎没有填充循环的第一个文件。我已经稍微编辑了这个问题,因为我刚刚注意到最新周期的所有三行都带有错误消息。使用命令返回日志:
grep refused logfile | awk '{print substr($3,1,5)}' | uniq -c
要获取日期和计数,请查看以下统计信息:
3 11:00
3 11:30
3 12:00
3 12:30
3 13:00
3 13:30
2 14:00
3 14:30
3 15:00
3 15:30
3 16:00
2 16:30
2 17:00
2 17:30
2 18:00
2 18:30
2 19:00
3 19:30
表明有些错误消息的计数正确,但不是全部。
我想知道是否有人知道为什么会这样。
【问题讨论】: