2015-07-10 4 views
1

Мне нужно постоянно отправлять файлы автоматически по FTP. Первоначально у меня просто был скрипт, который загружался в stdin для FTP, но понял, что каждый раз, когда я это делаю, мне нужно закрыть, а затем снова открыть соединение между сервером и клиентом. Повторное соединение занимает больше времени, чем отправка файла. Я попытался избежать этого, создав отдельный скрипт, чтобы открыть соединение и запустить скрипт для отправки файла в цикле.Looping FTP в скрипте bash

В этом случае проблема: после запуска скрипта подключения ftp автоматически отключается. Вот сценарий подключения.

#!/bin/bash 

HOST='192.168.1.2' 
USER='user' 
PASSWD='passwd' 

echo "open $HOST 
user $USER $PASSWD 
ascii" > /tmp/ftp.$$ 

ftp -ivn < /tmp/ftp.$$ >> ftplog.txt 
rm /tmp/ftp.$$ 

и это скрипт для отправки файла.

#!/bin/bash 
echo "put localfile.txt remotfile.txt" > /tmp/ftp.$$ 
ftp -ivn < /tmp/ftp.$$ >> ftplog.txt 
rm /tmp/ftp.$$ 

Сценарий подключения открывает соединение, но закрывает его снова после его запуска. Любой способ избежать этого?

Я должен уточнить, что я не загружаю список файлов, а один файл, который обновляется другим скриптом и отправляется после обновления. Этот один файл отправляется снова и снова как можно ближе к реальному времени.

+0

Привет, это кажется ненужным сложность здесь внутри забросил. Почему три сценария выполняются один за другим с перенаправлением ввода/вывода, в то время как вы можете просто параметризовать скрипт со встроенной функцией FTP? –

+0

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

+0

Вы можете использовать FTP-сервер FTP для загрузки многих файлов в одном соединении, но для автоматизации этого все файлы должны находиться в одной папке. –

ответ

1

вы можете upoload все файлы в папке со следующим сценарием

#!/bin/bash 

HOST='your host' 
USER="your user" 
PASSWD="pass" 
REMOTEPATH='/upload' 

function usage(){ 
    echo "Usage $0 <folder>" 
} 

function ftp(){ 
    ftp -n $HOST <<END_SCRIPT 
    quote USER $USER 
    quote PASS $PASSWD 
    cd $REMOTEPATH 
    lcd $1 
    mput * 
    quit 
    END_SCRIPT 
} 

if [[ $# -ne 1 ]] 
    then 
     usage 
    else 
     ftp $1 
     exit 0 
fi 
+0

Это был бы отличный вариант, если бы я хотел загрузить много разных файлов. Тем не менее, я ищу для загрузки одного файла каждый раз, когда он обновляется с помощью другой программы. По сути, синхронизация файла на удаленной машине с файлом на локальной машине. Это не группа файлов, загружаемых одновременно, но один файл отправляется в разные моменты времени. –

+0

Тогда почему бы не использовать rsync? –

+0

rsync определенно остается опцией. Я думаю, что rsync может быть не таким быстрым, как ftp, даже с открытием и закрытием ftp, просто потому, что ssh собирается замедлить работу. Я отправлю их обоих и узнаю. –

Смежные вопросы