Nowe posty

Autor Wątek: FTP wykonywanie poleceń ze skryptu  (Przeczytany 6922 razy)

aksimoN

  • Gość
FTP wykonywanie poleceń ze skryptu
« dnia: 2012-05-12, 11:54:43 »
Witam, potrzebuję napisać skrypt który przerzuci pliki za pomocą FTP mam na razie coś takiego:

#!/bin/bash

echo " ---- Wysyłam Pliki na serwer FTP -----"
ftp -n 10.1.1.203  <    quote USER usr123
    quote pass123
    passive
    ascii
    put CM1 /CMDZN01/CM1.txt        > /dev/null 2>&1
    echo "plik CM1 przesłano 'data'" > log_dec_zad.txt    
    put CM2 /CMDZN02/CM2.txt          >  /dev/null 2>&1
    echo "plik CM2 przesłano 'data'" > log_dec_zad.txt  
    quit
END_SCRIPT
echo " ----- pliki przesłane ----- " >

wykonanie skryptu "zwiesza" się po wykonaniu polecenia FTP, nawet nie wiem czy połączył się z zadanym mu adresem, może komendy FTP powinny byc w oddzielnym skrypcie który kolejne linie będzie traktował jako kolejne komendy.. proszę o pomoc... po przeszukaniu googla znalazłem podobne przykłady ale u mnie to nie działa... jakaś literówka, błąd, a może całe podejście jest złe?!? proszę o pomoc jestem laikiem

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
FTP wykonywanie poleceń ze skryptu
« Odpowiedź #1 dnia: 2012-05-12, 12:58:17 »
Polecam użyć polecenia 'expect'.

Serwerowi FTP może nie podobać się tak szybkie przesłanie wszystkich komend na raz.

Jeśli chcesz stwierdzić co się dzieje, najlepiej przeanalizuj to połączenie FTP Wiresharkiem. Wtedy dowiesz się, czy było połączenie i na czym się zawiesił.

rico

  • Gość
FTP wykonywanie poleceń ze skryptu
« Odpowiedź #2 dnia: 2012-05-12, 14:55:32 »
Moje pytanie, nie masz możliwości użycia SCP?
Wydaje się o wiele prostsze użycie secure copy niż babranie się z chorym expectem ;D
Hmmm spróbuj może tak:

#!/bin/bash

VAR=$(expect -c "
spawn 10.1.1.203
expect {
Name { send \\"login\\r\\"; exp_continue }
Password: { send \\"hasło\\r\\"; exp_continue }
ftp> { send \\"cd jakis_katalog\\r\\" }
}
exit
")

echo "$VAR"
gdzie zamiast cd jakis_katalog daj te swoje put'y ;)

#!/bin/bash

[color=#FF0000]set -x[/color]

echo " ---- Wysyłam Pliki na serwer FTP -----"
ftp -n 10.1.1.203 <quote USER usr123
quote pass123
passive
ascii
put CM1 /CMDZN01/CM1.txt > /dev/null 2>&1
echo "plik CM1 przesłano 'data'" > log_dec_zad.txt
put CM2 /CMDZN02/CM2.txt > /dev/null 2>&1
echo "plik CM2 przesłano 'data'" > log_dec_zad.txt
quit
END_SCRIPT
echo " ----- pliki przesłane ----- " >
i zobacz co wypluwa :)

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2838
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
FTP wykonywanie poleceń ze skryptu
« Odpowiedź #3 dnia: 2012-05-12, 21:42:14 »
A jak to musi być (protokół) ftp, to:

curl -v -T CM1.txt ftp://usr123:pass123@10.1.1.203/CMDZN01
curl -v -T CM2.txt ftp://usr123:pass123@10.1.1.203/CMDZN02
To już łatwo sparametryzować.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

rico

  • Gość
FTP wykonywanie poleceń ze skryptu
« Odpowiedź #4 dnia: 2012-05-13, 13:21:31 »
O słuszna uwaga z CURL'em :) Swoją drogą to ciekawe czy jeszcze coś by się znalazło ;)

Ksanderon

  • Gość
FTP wykonywanie poleceń ze skryptu
« Odpowiedź #5 dnia: 2012-05-13, 23:19:58 »
łatwiej było by to w Pythonie dość sensownie zrobić.

aksimoN

  • Gość
FTP wykonywanie poleceń ze skryptu
« Odpowiedź #6 dnia: 2012-05-15, 11:00:48 »
wyszło na to że zrobiłem to za pomocą echo i pipe'a do ftp

echo "
open 10.1.1.203
user usr123
pass pas123
put CM1 /CMDZN01/CM1.txt
put CM2 /CMDZN02/CM2.txt
" | ftp -inv

xavery

  • Gość
FTP wykonywanie poleceń ze skryptu
« Odpowiedź #7 dnia: 2012-05-18, 15:59:23 »
Cytat: Ryszard Stawiarski
O słuszna uwaga z CURL'em :) Swoją drogą to ciekawe czy jeszcze coś by się znalazło ;)
Osobiście polecam klienta ncftp/ncftpput.