• Главная
    Главная Страница отображения всех блогов сайта
  • Категории
    Категории Страница отображения списка категорий системы блогов сайта.
  • Теги
    Теги Отображает список тегов, которые были использованы в блоге
  • Блоггеры
    Блоггеры Список лучших блоггеров сайта.
  • Блоги групп
    Блоги групп Страница списка лучших командных блогов.
  • Авторизация
    Войти Login form

FTP через макросы

Как автоматизировать работу с несколькими FTP серверами в Linux? Как запускать задания для FTP через cron?
Стандартный способ работы с FTP через командную строку linux:
$ftp ftp.server.ru
на запросы сервера вводим логин и пароль, а можно логиниться сразу:
$ftp user:password@ftp.server.ru
можно получить файл с FTP одной строкой:
$echo get myfile.txt | ftp user:password@ftp.server.ru
(данный способ работает не на всех дистрибутивах - работает на SUSE, но не работает на Debian и RedHat)

А как нам автоматизировать работу с FTP? К примеру нам надо скопировать все файлы из папки ~/webfiles на локальном компьютере в директорию webdirectory на FTP сервере и автоматизировать данный процесс (запуск из cron).
создадим скрытый файл .netrc с нашей домашей директории:
$vim ~/.netrc
и впишем в него переменные среды для FTP:
machine 192.168.1.2
login bainm
password myftppassword
Теперь мы можем работать с FTP сервером по адресу 192.168.1.2 без ввода пароля:
$echo get testfile.txt | ftp 192.168.1.2
Connected to 192.168.1.2.
220 acamas.ilium FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) ready.
331 Password required for bainm.
230 User bainm logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
local: testfile.txt remote: testfile.txt
227 Entering Passive Mode (192,168,1,2,9,203)
150 Opening BINARY mode data connection for 'testfile.txt' (0 bytes).
226 Transfer complete.
221 Goodbye.

Мы получили с сервера файл testfile.txt

Создание функции в bash. Создадим в bash функию compileFTP:
function compileFTP {
cat <<STOP
prompt off
lcd $1
#Don't worry if the target directory already exists - FTP won't complain:
mkdir $2
cd $2
mput *
STOP
}


далее если в командной строке ввести:
$compileFTP ~/webfiles webdirectory | ftp 192.168.1.2

после запуска мы автоматически заходим на сервер (без ввода логина и пароля, так как они прописаны в .netrc, на сервере создаётся каталог webdirectory в который закачиваются все файлы из директории ~/webfiles на локальном компьютере.

Но написание функций для FTP в bash неудобно, поэтому лучше пропишем эти действия в ~/.netrc как макрос и назовём его updateWeb:
$vim ~/.netrc
впишем в него:

macdef updateWeb
prompt off
lcd /home/bainm/webfiles
mkdir webdirectory
cd webdirectory
mput *


вызов данного макроса осуществляется следующим образом:
echo "$ updateWeb" | ftp 192.168.1.2
"$ updateWeb" говорит ftp клиенту использовать макрос с именем updateWeb.

теперь мы можем прописать наш макрос в cron для атоматического запуска в определённое время:

$crontab -e
вписываем:
0 0 * * * echo "$ updateWeb" | ftp 192.168.1.2

Чтобы не переписывать .netrc для каждого ftp сервера (к примеру у каждого из серверов различная структура каталогов и загрузка файлов для каждого из них долна происходить из разных каталогов), мы можем вписать в него:

macdef updateWeb
prompt off
lcd $1
mkdir $2
cd $2
mput *


теперь для вызова макроса нужно подставить в его аргументы значения (имена каталогов):
echo "$ updateWeb /home/bainm/webfiles webdirectory" | ftp 192.168.1.2

Привязка к тегам Linux
в разделе: Internet Просмотров: 3990
0
  • Никаких комментариев пока не было создано. Будьте первым комментатором.

Оставить комментарий

Гость
Гость Вторник, 26 Май 2020