FTP внутри скрипта не работает - PullRequest
4 голосов
/ 25 мая 2011

Мой хост обновил мою версию FreeBSD, и теперь один из моих скриптов сломан.Скрипт просто загружает фид данных в Google для их сервисной службы.

Сценарий (который работал до обновления):

ftp ftp://myusername:mypassword@uploads.google.com/<<END_SCRIPT
ascii
put /usr/www/users/myname/feeds/mymerchantfile.txt mymerchantfile.txt
exit
END_SCRIPT

Теперь сценарий говорит «неизвестный хост».Тот же скрипт работает на OSX.

Я пытался удалить "ftp: //".- Нет эффекта, я могу войти в систему из командной строки, если я ввожу имя пользователя и пароль вручную.

Я искал другие решения, а также пробовал следующее:

HOST='uploads.google.com'
USER='myusername'
PASSWD='mypassword'
ftp -dni <<END_SCRIPT
open $HOST
quote USER $USER
quote PASS $PASS
ascii
put /usr/www/users/myname/feeds/mymerchantfile.txt mymerchantfile.txt
END_SCRIPT

И

HOST='uploads.google.com'
USER='myusername'
PASSWD='mypassword'
ftp -dni <<END_SCRIPT
open $HOST
user $USER $PASS
ascii
put /usr/www/users/myname/feeds/mymerchantfile.txt mymerchantfile.txt
END_SCRIPT

Ничто из того, что я могу найти в Интернете, похоже не делаеттрюк.У кого-нибудь есть другие идеи?Я не хочу использовать файл .netrc, так как он выполняется cron под другим пользователем.

Ответы [ 5 ]

1 голос
/ 25 мая 2011

ftp(1) показывает, что имеется простой ключ командной строки -u для загрузки файла; и поскольку ascii является значением по умолчанию ( дрожь ), возможно, вы можете заменить весь сценарий одной командной строкой:

ftp -u ftp://username:password@uploads.google.com/mymerchantfile.txt\
/usr/www/users/myname/feeds/mymerchantfile.txt

(Длинная строка обернута \\n, не стесняйтесь снимать обратную косую черту и помещать все это в одну строку.)

0 голосов
/ 05 июля 2011

Можете ли вы проверить, есть ли разница в среде между вашим входом в оболочку и заданием cron?Из вашего логина запустите env и найдите ftp_proxy и http_proxy.

Далее, включите в cron-задание строку, которая выгрузит среду, например, env >/tmp/your.env.

Может быть, есть какая-то разница ... Кроме того, вы дважды проверили правильное использование переключателя -n?

0 голосов
/ 25 мая 2011

В BSD вы можете создать NETRC скрипт, который ftp может использовать для входа в систему. Вы даже можете указать файл NETRC в своей команде ftp, используя параметр -N. В противном случае используется значение по умолчанию NETRC ($HOME/.netrc).

0 голосов
/ 25 мая 2011

Некоторые идеи:

просто мысль, поскольку она выполняется в подоболочке, которая должна правильно наследоваться от родителя, env показывает какую-либо разницу при выполнении изнутри скрипта, чем из оболочки?*

Используете ли вы правильный "шебанг"?

Любой прокси, который требует аутентификации?

Можете ли вы пинговать хост?

0 голосов
/ 25 мая 2011
ftp $HOSTNAME <<EOFEOF
$USER
$PASS
ascii
put $LOCALFILE $REMOTETEMPFILE
rename $REMOTETEMPFILE $REMOTEFINALFILE
EOFEOF

Обратите внимание, что приведенный выше код можно легко взломать, например, используя пробелы в рассматриваемых переменных. Кроме того, этот метод практически не дает возможности надежно обнаруживать и обрабатывать ошибки.

Посмотрите на инструмент ожидания, если вы еще этого не сделали. Вы можете обнаружить, что это решает проблемы, о которых вы не знали.

...