ftp скрипт копирования файлов
Простой способ резервного копирования Linux-сервера с выгрузкой файлов по FTP
Здравствуйте.
О важности регулярного резервного копирования уже сказано очень много слов. В этой статье мы предлагаем вниманию читателей примеры простых скриптов для бэкапа файлов и баз данных MySQL с последующей выгрузкой архивов на удаленный FTP-сервер.
Несмотря на то что мы в NQhost предлагаем решения по сохранению snapshot’ов VPS-контейнеров, процесс бэкапа собственными силами — безусловно важнейшая вещь.
Хозяйство
Виртуальный или физический сервер с установленной Linux-ОС, веб-сервером и базами данных MySQL.
Файлы веб-сервера располагаются в директориях
/home/site1
/home/site2
/home/site3
Задача
Создание скрипта для резервного копирования файлов и баз данных с сохранением на удаленном FTP-сервере и запуск его каждый день.
Решение
Для простоты примера работать мы будем из-под root`а, директория для хранения бэкапов файлов — /root/backup/server, а для дампов MySQL — /root/backup/mysql
Backup файлов
Здесь приводится пример скрипта для бэкапа файлов, для наглядности пояснения даны в квадратных скобках на русском языке.
#!/bin/sh
### System Setup ###
BACKUP=/root/backup/server
### FTP ###
FTPD=»/»
FTPU=»username» [имя пользавателя (логин) удаленного ftp-cервера]
FTPP=»megapassword» [пароль доступа к удаленному ftp-серверу]
FTPS=»my_remote_backup.ru» [собственно, адрес ftp-сервера или его IP]
### Binaries ###
TAR=»$(which tar)»
GZIP=»$(which gzip)»
FTP=»$(which ftp)»
## Today + hour in 24h format ###
NOW=$(date +%Y%m%d) [задаем текущую дату и время, чтобы итоговый файл выглядел в виде server-YYYYMMDD.tar.gz]
Результатом работы данного скрипта будет созданный файл в директории /root/backup/server вида server-ГГГГММДД.tar.gz содержащий в себе tar-архивы директорий /etc, /home/site1, /home/site2 и /home/site3
Этот же файл будет загружен на FTP-сервер, который мы указали в начале скрипта.
Backup баз MySQL
Этим скриптом мы выгружаем базы данных MySQL (делаем т.н. «дампы). Каждая база выгружается в отдельный файл.
#!/bin/sh
# System + MySQL backup script
### System Setup ###
BACKUP=/root/backup/mysql
### Mysql ### [параметры доступа к нашим базам MySQL]
MUSER=»root»
MPASS=»megapassword»
MHOST=»localhost»
### FTP ###
FTPD=»/»
FTPU=»username» [имя пользавателя (логин) удаленного ftp-cервера]
FTPP=»megapassword» [пароль доступа к удаленному ftp-серверу]
FTPS=»my_remote_backup.ru» [собственно, адрес ftp-сервера или его IP]
### Binaries ###
TAR=»$(which tar)»
GZIP=»$(which gzip)»
FTP=»$(which ftp)»
MYSQL=»$(which mysql)»
MYSQLDUMP=»$(which mysqldump)»
## Today + hour in 24h format ###
NOW=$(date +%Y%m%d)
Для того чтобы обратиься к ftp через bat-файл еще нужен текстовый файл с описанием ftp.
Описываем commands.txt для выгрузки на ftp:
open ftp.test.ru
пользователь
пароль
put F:\выгружаемый_файл.txt
quit
Описываем commands.txt для загрузки c ftp:
open ftp.test.ru
пользователь
пароль
lcd F:\
get загружаемый_файл.txt
quit
В этом случае загружаемый_файл.txt выгрузиться из корня ftp в корень диска F:\
Описываем commands.txt для удаления всех файлов c ftp:
open ftp.test.ru
пользователь
пароль
mdelete *
quit
Специальные предложения
USER login_on_ftp password_on_ftp
cd /public_html/userfiles
lcd «D:\onFTP»
quote PASV
binary
put ostatki.zip
get ostatki.zip ostatki_from.zip
close
bye
disconnect
quit
Воспользуйтесь утилитой WGET тут и закачка с FTP или обновление с него(например качает только новые файлы) и тд
Официальный сайт на Eng | Список ключей на русском
размешаете все файлы в одну папку:
— сама утилита wget.exe (скаченную с сайта);
— bat-ник со строкой
для выгрузки воспользуйтесь утилитой WPUT.
Такой вопрос. Происходит зацикливание при запуске бат файла, и ничего не копирует. Адрес хоста у меня https.
В чём косяк? Если всё делал по примеру
Обновление 23.09.14 18:01
Код открыт Не указано
См. также
Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо
Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.
14.04.2017 66970 user700211_a.straltsou 30
Исправление ошибки плана обслуживания MS SQL
Частный случай решения ошибки выполнения планов обслуживания MS SQL.
20.08.2021 667 user1473990 1
Резервное копирование баз PostgreSQL с помощью BASH (Bourne again shell)
Исходный текст скрипта с алгоритмом формирования резервной копии баз(ы) 1С, развернутой на СУБД PostgreSQL, без необходимости отключения пользователей (то есть непосредственно при работе самих пользователей).
15.06.2021 1125 creatermc 4
Выгрузка журнала регистрации в ElasticSearch с помощью Python
Данный скрипт реализован на языке python с подключаемой библиотекой ElasticSearch, что позволяет парсить и загружать файлы ЖР напрямую в ES. ВНИМАНИЕ! Данный парсер работает только со старым форматом ЖР и только, если у него периодичность день или час.
26.04.2021 896 buganov 2
Копирование числовых ячеек из 1С в Excel Промо
Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.
15.01.2019 34218 itriot11 27
Быстрый запуск информационной базы 1С:Предприятия 8.3 в Python c использованием bat файла
12.04.2021 1149 fscorp
Как быстро развернуть автоматическую линию проверки своего решения на 1С, затратив 8 часов и получив выигрыш в 1 человеко/месяц
У разработчиков 1С уже есть все инструменты, позволяющие использовать современные инженерные практики в 1С. О том, как за 8 часов внедрить автоматические проверки для решений на 1С, снизить в них количество глупых ошибок, а также высвободить ресурсы на более интеллектуальную работу на INFOSTART MEETUP Ekaterinburg.Online рассказал Артур Аюханов.
05.04.2021 5874 artbear 15
Выполняем полуавтоматический поиск паттернов в записанных новых или существующих сценариях и заменяем на готовые скрипты действий из библиотеки сценариев.
29.03.2021 1311 ivanov660 0
Как настроить сервер 1С по умолчанию для ПРОФ лицензии после 10.09.2019 Промо
Здесь мы собираем все данные по настройкам сервера для работы ПРОФ лицензии.
Скачивание, загрузка и удаление файлов с FTP-сервера из командной строки
Часто требуется автоматизировать процессы скачивания, загрузки и удаления файлов c FTP-сервера. Например, при работе с распределенными базами данных 1С или для сохранения резервных копий. Но не все знают, что эти процедуры можно выполнять из командной строки, не прибегая к дополнительному программному обеспечению, то есть средствам Windows. Ниже я приведу синтаксис команд для работы с FTP, а также примеры bat-файлов для этих операций.
1. Команда ftp
Для обмена файлами с FTP-сервером используется команда ftp, вот ее синтаксис:
FTP [-v] [-d] [-i] [-n] [-g] [-s:имя_файла] [-a] [-A] [-x:sendbuffer]
[-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [узел]
-v | Отключение вывода на экран ответов с удаленного сервера. |
-n | Отключение автоматического входа при начальном подключении. |
-i | Отключение интерактивных запросов при передаче нескольких файлов. |
-d | Включение отладочного режима. |
-g | Отключение глобализации имен файлов (см. команду GLOB). |
-s:имя_файла | Задание текстового файла, содержащего команды FTP, которые будут выполняться автоматически при запуске FTP. |
-a | Использование локального интерфейса для привязки соединения. |
-A | Анонимный вход в службу. |
-x:send sockbuf | Переопределение стандартного размера буфера SO_SNDBUF (8192). |
-r:recv sockbuf | Переопределение стандартного размера буфера SO_RCVBUF (8192). |
-b:async count | Переопределение стандартного размера счетчика async (3) |
-w:windowsize | Переопределение стандартного размера буфера передачи (65535). |
узел | Задание имени или адреса IP удаленного узла, к которому необходимо выполнить подключение. |
Как видно, здесь нет операторов для подключения к серверу и работы с файлами. Дело в том, что эта команда только запускает сеанс ftp:
Далее, работа с FTP-сервером происходит уже при помощи следующих операторов (пропустить) :
!
Временный переход в оболочку.
append
Добавление в файл.
ascii
Установка режима передачи файлов в формате ascii.
bell
Выдача звукового сигнала по завершении команды
binary
Установка режима передачи файлов в двоичном формате.
bye
Завершение сеанса ftp и выход.
cd
Изменение рабочего каталога на удаленном компьютере, где:
— имя каталога, который станет рабочим.
close
Завершение сеанса ftp.
debug
Переключение режима отладки.
delete
Удаление файла на удаленном компьютере, где:
— имя файла для удаления.
dir [ ] [ ]
Вывод содержимого каталога удаленного компьютера, где:
— каталог, содержимое которого будет выведено, если не задан, используется текущий каталог;
— задает локальный файл, для сохранения в список, если не задан, список выводится на экран.
disconnect
Завершение сеанса ftp.
get [ ]
Получение файла, где:
— удаленный файл для копирования;
— имя файла на локальном компьютере.
glob
Переключение метасимвольного расширения имен локальных файлов.
hash
Переключение вывода «#» для каждого переданного блока данных.
help [ ]
Вывод справочных сведений для команды ftp, где:
— Команда, описание которой будет выведено, если не задана, произойдет вывод всех команд.
lcd [ ]
Изменение локального каталога рабочего компьютера, где:
— Имя нового локального каталога, если не задан то будет использоваться имя текущего каталога.
literal …
Отправка произвольной команды ftp, где:
— команды для отправки;
ls [ ] [ ]
Вывод сокращенного содержимого каталога удаленного компьютера, где:
— каталог, содержимое которого будет выведено, если не задан, используется текущий каталог;
— задает локальный файл, для сохранения в список, если не задан, список выводится на экран.
mdelete …
Удаление нескольких файлов на удаленном компьютере, где:
— имена файлов для удаления.
mdir …
Вывод содержимого нескольких каталогов удаленного компьютера, где:
— каталог, содержимое которого будет выведено;
— задает локальный файл, для сохранения в список, если не задан, список выводится на экран.
mget …
Получение нескольких файлов, где:
— удаленный файл для копирования.
mkdir
Создание каталога на удаленном компьютере, где:
— имя удаленного каталога для создания.
mls …
Вывод сокращенного содержимого нескольких каталогов удаленного компьютера, где:
— каталог, содержимое которого будет выведено, если не задан, используется текущий каталог;
— задает локальный файл, для сохранения в список.
mput …
Отправка нескольких файлов, где:
— имя локальных файлов, которые будут скопированы.
prompt
Переключение интерактивной подсказки для составных команд.
put [ ]
Отправка одного файла, где:
— имя локального файл для копирования;
— имя файла на удаленном компьютере.
pwd
Вывод рабочего каталога удаленного компьютера.
quit
Завершение сеанса ftp и выход в командную строку.
quote
Отправка произвольной команды ftp, где:
— команда для отправки.
recv [ ]
Получение файла с использованием текущих настроек типов файлов, где:
— удаленный файл для копирования;
— имя файла на локальном компьютере.
remotehelp [ ]
Получение справочных сведений о командах удаленной системы, где:
— команда удаленной системы, если не задан, то выводится список всех команд.
rename
Переименование удаленного файла, где:
— имя файла для переименования;
— новое имя файла.
rmdir
Удаление каталога на удаленном компьютере, где:
— имя каталога для удаления.
send [ ]
Копирование одного файла с использованием текущих настроек типов файлов, где:
— имя локального файл для копирования;
— имя файла на удаленном компьютере.
status
Отражение текущего состояния подключения ftp.
trace
Переключение трассировки пакетов.
type [ ]
Установка типа передачи файлов, где:
— тип передачи файлов, если не указан будет выведен текущий тип передачи файлов.
user [ ] [ ]
Отправка сведений для подключения к удаленному компьютеру, где:
— имя пользователя для подключения к удаленному компьютеру;
— пароль, для указанного имени пользователя, если не указан, но требуется для подключения, команда ftp запросит его у пользователя;
— учетная запись для подключения к удаленному компьютеру, если не указана, но требуется для подключения, команда ftp запросит ее у пользователя;
verbose
Переключение режима вывода сообщений.
Рассмотрим небольшой пример.
Пусть у нас есть FTP-сервер с адресом tavalik.ru, имя пользователя для подключения — tavalik, пароль — 1234567890. Требуется загрузить на сервер в директорию «Temp\Backup» файл file_data.dat из «C:\example», а затем сохранить его же на локальный компьютер, в эту же директорию, но уже под именем file_from_ftp.dat.
Для этого необходимо выполнить следующий набор команд:
В итоге получим требуемый результат:
Обратите внимание, что при указании полного пути на FTP-сервере используется знак «/» между директориями, а для указания пути на локальном компьютере будет использоваться, как обычно, знак «\». Кроме того, если путь будет содержать пробелы, то следует заключить его в кавычки.
где файл transport.txt находится в директории «C:\example» и содержит тот же набор операторов:
2. Пример bat-файла для загрузки файла на FTP
В данном примере имя файла и директорий жестко прописаны в файле. Это не всегда удобно. Доработаем bat-файл таким образом, чтобы данные для загрузки он получал в качестве параметров, а также вынесем все изменяемые значения в переменные файла. Получим следующий код (скачать файл):
Аналогичным образом можно написать bat-файлы для получения файлов и удаления файлов на FTP-сервере, а также исполняющий файл с произвольным набором инструкций.
Смотрите также:
Не все знают, что можно создать прямую ссылку на файл, хранимый на FTP-Сервере, «зашив» в нее логин и пароль. Также возможно создать ярлык на какую-либо директорию или даже подключить ее…
Может случиться так, что в процессе установки MS SQL Server 2012 были установлены компоненты, необходимость в которых со временем отпала (или были установлены по ошибке). В этом случае, в целях…
FTP-Сервер обеспечивает возможность передачи файлов между клиентом и сервером с помощью протокола FTP. Здесь будет рассказано как запустить FTP-сервер в Windows Server 2008 R2. 0. Оглавление Добавление службы FTP-сервер Добавление…
Script для поиска и копирования файла по фтп.
Есть текстовый документ в котором хранятся данные(название файлов, размер, дата). Нужно что бы скрипт брал имена файлов(первый столбец), находил их на машине(показывая путь к ним) и копировал по фтп. Так же бывают файлы с доп припиской «_123», которую нужно убрать при создании копии.
Все выходит, но вот момент с копированием с другой директории не особо. Переменную вторую надо найденному пути через файнд, которая потом будет указывать где брать для копирования файлы с документа.
Зачем учить плохому? Зачем тут вообще cat?
Что касается парсенья cvs, то вот мой:
Зачем учить плохому? Зачем тут вообще cat?
Это приманка на готовый скрипт. Мухахахахаххаа.
Вот что то такое у меня получилось. Но обратно же файл который находиться в другой директории не копируеться. И последние 2 команды думаю можно переделать.
Но что плохого в cat file | while read? Чем оно хуже done ★★★★★ ( 18.10.18 12:29:35 )
Вопрос с копированием файла который был найден в другом директории остаеться. Да и имя он будет изменять?
Так ты не правильно сделать. У тебя cd и cp за скриптом. done надо в конец скрипта, cd не надо вообще cp и так скопирует. В одну строчку писать не обязательно.
Как то так получилось. Вопрос, а как указать что бы файл читался с 2 строки но 1 столбца?
Вот что то такое у меня получилось.
К сожалению, я вам не могу помочь. Ваш заглавный пост — нечитаемый бред, ваш скрипт больше похож на схематичную картинку с попыткой отобразить, что вам собственно надо, но совсем не похож на рабочий скрипт.
И по именам, вот если такая будет ситуация что имя в документе указано как «test» а найден будет «test_123», или не сможет найти потому что имя не совпадает. Это можно как то указать в скрипте? Переименование или поправку такую.
Что Вам не понятно?
Но что плохого в cat file | while read? Чем оно хуже done ★★★★★ ( 18.10.18 13:11:08 )
Можете тогда показать целосный вид скрипта где учитывались моменты с именем что я вот выше отписал и нормально читался документ с именами и дальнейшим копированием по фтп.
Вопрос, а как указать что бы файл читался с 2 строки но 1 столбца?
Погугли про head/tail
И по именам, вот если такая будет ситуация что имя в документе указано как «test» а найден будет «test_123», или не сможет найти потому что имя не совпадает. Это можно как то указать в скрипте? Переименование или поправку такую.
Можете тогда показать целосный вид скрипта
Мне делать больше нечего что ли?
Игнорирование первой строки делается её чтением и не запуском парсера для нее.
Надо как то обрабатывать еще дубликаты, которые будут, если похожие имена иметь будем. Тобишь если 2 файла, мы их делаем под 1 именем и далее как то надо от этой проблемы уйти. Да и передача переменных отсутствует.
Команда с переименованием не сработала, возможно другие идеи есть?
Многопоточное скачивание файлов с ftp python-скриптом
Зачем это нужно?
Однажды передо мной встала задача копирования большого количества файлов с ftp-сервера. Нужно было делать бэкап. Казалось бы, что может быть проще! Но увы, ничего готового работающего так же быстро для моих условий найти не удалось.
Ситуация
Нужно было забирать периодически пару сотен файлов с ftp-сервера под Windows. Много мелочи и несколько очень крупных по размеру файлов. Суммарно примерно на 500 Гб. Сервер представляет собой vps, расположенный довольно далеко за рубежом. Днем машина высоко нагружена, рано ночью выполняются регламентные работы, итого на скачивание часов 5 максимум.
Ни одна из рассмотренных мной утилит не смогла справиться качественно и за отведенное время. Ну что ж, деваться некуда, нормальную систему резервного копирования ещё не купили, а значит ноги в руки вооружаемся редактором или IDE Python и вперёд! За приключениями!
Конфиг
Все параметры для скрипта вынесем в отдельный файл для удобства.
В начале был список
Скачать файлы с ftp сама по себе задача не сложная, но путём недолгих экспериментов было выяснено, что скачивание файлов занимает время, а таймаут ftp-соединения приходит к нам гораздо быстрее. Следовательно, качать нужно каждый файл в новом соединении, иначе велик риск чего-то потом не досчитаться в скачанных файлах.
Для этого нам нужен список этих самых файлов. Ни о каком статичном списке файлов, конечно, речи не идет, значит нам его при каждом выполнении скрипта получать с сервера по-новой.
Параметры берутся из конфига. Конечно же в нужно не забыть импортировать библиотеку ftplib, чтобы этот кусок заработал.
Список файлов с сервера мы получим с помощью следующего класса:
Помимо методов соединения с сервером, получения списка файлов и определения его длины здесь имеет метод, который возвращает нам следующий файл для скачивания, из списка он при этом, конечно, удаляется.
Логирование
Для ведения логов скачивания будет использовать стандартную библиотеку logging. Создадим класс, который будет заниматься логированием.
Скрипт будет поддерживать просто логирование в файл и ротацию файловых логов, ибо логи имеют свойство расти непомерно и это надо бы держать под контролем.
Скачивание файла
Каждый файл будет скачиваться в отдельном потоке. Класс, скачивающий один конкретный файл с сервера выглядит следующим образом:
Для подсчета количества одновременно скачиваемых файлов мы будет использовать свойство класса count. В нём у нас будет количество существующих экземпляров класса: в конструкторе счетчик наращивается, в деструкторе, соответственно, уменьшается.
При сохранении списка файлов скрипт сохраняет также путь до этого файла, этот путь мы воссоздаем при скачивании с помощью os.makedirs.
Статус-файл
Класс для работы с этим файлов выглядит так:
Многопоточность
Ну и, наконец, сама основная функция скрипта, которая осуществляет работу с потоками скачивания:
Здесь мы запускаем логирование, получаем список файлов ( он хранится в памяти).
В вечном цикле while мы проверяем количество одновременно запущенных скачиваний и, при необходимости, запускаем дополнительные потоки.