После выяснения (конечно, через 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
, указывающую, что некоторые имеют правильное количество сообщений об ошибкахно не все.
Интересно, кто-нибудь знает, почему это так.