Ответы FTP-сервера иногда не обнаруживаются в пакетном режиме - PullRequest
0 голосов
/ 30 марта 2012

Я запускаю командный файл в Win2003 для передачи файла по FTP.

Пакетный файл передает результаты сеанса FTP в НАЙТИ, чтобы увидеть, есть ли сообщение об успехе 226, и это хорошо работает. К сожалению, из планировщика я попал в условие уровня ошибки, хотя файл успешно передается и возвращается сообщение 226.

FTP -s:go.ftp 2>NUL | Find "226 Transfer OK" > NUL
If ErrorLevel 1 Echo ERROR - FTP transfer failed. >> err.log

Учетная запись пользователя является учетной записью администратора, поэтому это не проблема с правами. Есть идеи?

UPDATE:

Сообщение 226 не перехватывается с помощью перенаправления, что приводит к ошибке FIND. В моем тестировании я перенаправил вывод FTP в отдельный файл при запуске из планировщика. Хотя команды FTP выполняются успешно, ответы сервера не отображаются.

Вот мой FTP-скрипт:

open ftpsite
username
password
dir
quit

Вот вывод (FTP -s:go.ftp >ftp.log 2>ftp.err).

User (ftpsite:(none)): open ftpsite
04-01-12  02:35PM       <DIR>          DIR1

04-01-12  02:35PM       <DIR>          DIR2

04-01-12  02:35PM       <DIR>          DIR3

04-01-12  02:35PM       <DIR>          DIR4



dir 
quit

Кроме того, ничего не появляется в потоке ошибок (2> ftp.err). По крайней мере, теперь я знаю, почему мой уровень ошибок FIND не вызывается, но почему не фиксируются ответы FTP-сервера? Я не использую ключ -v и не переключаю подробности.

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Включает ли путь для планировщика каталоги FTP и FIND?

Можете ли вы сохранить вывод FTP во временный файл и передать его в FIND для целей тестирования? Таким образом, вы можете проверить вывод FTP по факту, чтобы увидеть, что могло произойти.

Как насчет исключения перенаправлений (или перенаправления вывода в файл журнала ошибок), чтобы можно было просмотреть вывод командного файла на наличие возможных сообщений об ошибках?

0 голосов
/ 09 мая 2012

Я наткнулся на это исследование одного недостающего кода 226 в серии успешных передач.Моя команда ftp вызывается из vbscript, но в остальном она похожа на вашу:

ftp -i -n -s:"\path\to\cmdfile.txt" [ftpserver] > "\path\to\stdout.log" 2> "\path\to\stderr.log"

Из-за ключа -n и анонимного входа мой командный файл немного отличается:

USER anonymous
cd [UploadDirectory]
binary
put [file]
quit

Как вы заметили, поток STDERR всегда кажется пустым, даже если соединение не установлено.Во всех моих тестах я никогда не видел, чтобы STDERR содержал какую-либо информацию.Однако STDOUT содержит полный журнал транзакций:

220 Unauthorized access to this server is prohibited. All actions are logged.
USER anonymous
230-Anonmyous Access
230 Login successful.
cd [UploadDirectory]
250 Directory successfully changed.
binary
200 Switching to Binary mode.
put "[file]"
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
1058.3090.82quit
221 Goodbye.

Вместо того, чтобы передать команду НАЙТИ, как в вашем примере, я анализирую файл STDOUT, и 99% времени сопоставления выполняетсяна «226 Передача завершена.»;1% времени я вижу только

150 Ok to send data
quit

В тех случаях, когда 226 отсутствует, файл успешно передан (??) и выглядит нетронутым.Все это говорит о том, что, хотя и не так элегантно, как передача вывода в FIND, синтаксический анализ файла STDOUT должен дать вам желаемые результаты.

Несколько других вещей, о которых я могу подумать:1017 *

  1. Большинство проблем планировщика / cron вызваны путями и разрешениями.MS Scheduler включает опцию «Start In (папка)» - вы пробовали установить это в каталог командных файлов?Кроме того, учетной записи пользователя, для которой вы выполняете запланированное задание, вероятно, следует дать явные (не унаследованные) разрешения на все файлы и папки, используемые пакетом.Если пакет последовательно работает из командной строки, но не работает в планировщике, проблема с разрешениями может быть не просто добавлением учетной записи пользователя планировщика в группу администраторов.
  2. Что показывают журналы ftp вашего сервера?Мой ftp-сервер vsftpd (Linux), и журналы моего сервера по существу имитируют поток STDOUT, захваченный перенаправлением (с некоторой дополнительной информацией).Это может сказать вам, передаются ли коды успешной передачи с вашего ftp-сервера.
  3. Вероятно, не причина, но рассмотрите возможность использования параметра / I с FIND, чтобы сделать его нечувствительным к регистру
  4. Вы пробовали связываться с командой перенаправления?Что-то похожее на: ftp ... 2> & 1 |найти ...
...