LINUX.ORG.RU
решено ФорумAdmin

Как скопировать файлы с сервера на сервер?

 , ,


0

2

Здравствуйте. Имеются 2 Astra Linux сервера в сети. На одном есть бэкап портала который создаётся каждый день и разбивается на 200+ частей. Нужно его скопировать на другой так же каждый день.

В терминале команда find /var/backup/ -atime -1 type -f находит и показывает все 200+ нужных мне файлов для копирования.

Команда scp -r /var/backup.log admin@serverbackups:/home/backups копирует файл с сервера на сервер без запроса пароля (прописал через ключ)

Хочу запихнуть всё это дело в крон, проверив перед этим под пользователем admin

scp -r "find /var/backup/ -atime -1 type -f" admin@serverbackups:/home/backups

Выводит ошибку: find /var/backup/ -atime -1 type -f Permission denied

Хотя пользователя admin добавил в группу-владельца папки /var/backup/

Если скопировать просто файл из этой папки, типа scp -r /var/backup/test.sql admin@serverbackups:/home/backups то всё работает



Последнее исправление: zawibis (всего исправлений: 1)

Заранее проверить скрипт на тестовой среде.

#!/usr/bin/env -S bash -eu

while IFS= read -rd '' i; do
  scp -r "${i}" 'admin@serverbackups:/home/backups'
done < <( find /var/backup/ -atime -1 type -f )

KaiKimera
()

scp -r "find /var/backup/ -atime -1 type -f" admin@serverbackups:/home/backups Если тут обычные кавычки - выглядит неправильным. Текст в кавычках останется текстом и будет восприниматься как имя файла, а чтобы выполнялась комада нужны вроде обратные кавычки ( ` ) - но это не точно.

PeleWin
()

Для копирования файлов для бекапа лучше использовать rsync, а не scp. А ещё лучше — специализированную программу для бекапа, тысячи их.

Aceler ★★★★★
()
scp -r "find /var/backup/ -atime -1 type -f" admin@serverbackups:/home/backups

даже интересно, а что эта команда по твоему должна была делать?

Я и баш видим желание скопировать файл под странным именем «find /var/backup/ -atime -1 type -f» в admin@serverbackups:/home/backups

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

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

rsync -av --progress /var/backup/ admin@serverbackups:/home/backups

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

Или уж составлять список и кормить его scp

find /var/backup/ -atime -1 type -f -exec scp "{}"  admin@serverbackups:/home/backups

Хуже, поскольку никакой докачки не будет, но все равно хоть так.

usermod
()
Ответ на: комментарий от usermod

Я использую эту команду только потому, что в исходной папке находятся бэкапы за последние 3 дня разбитые на части и не хочется копировать 700+ файлов

zawibis
() автор топика
Ответ на: комментарий от zawibis

‘‘‘find /var/backup/ -atime -1 type -f -exec scp «{}» admin@serverbackups:/home/backups’’’ здесь ругается на отсутствие аргумента у -exec

zawibis
() автор топика
Ответ на: комментарий от zawibis

rsync -av –progress /var/backup/ admin@serverbackups:/home/backups

выдаёт

bash: строка 1: rsync: команда не найдена

rsync: connection unexpectedly closed (0 bytes received so far) [sender]

rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.3]

zawibis
() автор топика
Ответ на: комментарий от zawibis

Ну так через три дня они все будут там же, на бэкапе. А вот если операция с scp не пройдет, придется повторять ее полностью заново, в то время как rsync продолжит там, где оборвалось. Само собой, rsync можно сказать копировать не все файлы. Просто необходимости в этом скорее всего, уже не будет.

usermod
()
Ответ на: комментарий от usermod

этот вариант плох тем, что на каждый файл будет каждый раз своё подключение делаться и запускаться scp

поэтому лучше тогда через xargs, что-то типа

(find /var/backup/ -atime -1 type -f ; echo "admin@serverbackups:/home)|xargs scp

mumpster ★★★★★
()
Ответ на: комментарий от mumpster

Так тоже плохо.

Вообще-то xargs сам определяет, сколько аргументов взять, чтобы не превысить длину командной строки.

В этой ситуации scp это плохо по определению.

usermod
()

делайте команду проще и она будет работать. а именно создавайте бэкапы в отдельных папках и копируйте все без команды find. можно потратить кучу времени на чтение документации. но это время можно посвятить на другие задачи.

jura12 ★★
()
Ответ на: комментарий от jura12

Мой вариант плохой. Выше правильно сказали, создаётся несколько подключений подряд.

Я так в лоб написал по-быстрому.

KaiKimera
()
Ответ на: комментарий от jura12

find, scp и rsync - отличные универсальные инструменты, которые будут пригождаться раз за разом. Так что как раз их имеет смысл изучать.

Насчет упрощения согласен. Автоматизация становится гораздо более предсказуемой и надежной, когда масимально упрощается.

usermod
()
Ответ на: комментарий от jura12

В этом вся загвоздка. Архив делиться по 100 Мб, а сам весит 15+ Гб, поэтому файлов много.

zawibis
() автор топика

В общем свою задачу решил тем, что поставил на оба сервера rsync и команда следующая:

rsync -avhr –progress /var/backup/* admin@serverbackups:/home/backups

zawibis
() автор топика
Ответ на: комментарий от zawibis

у -exec в конце должна быть ; ее лучше экранировать тоже \

find /var/backup/ -atime -1 type -f -exec scp {} admin@serverbackups:/home/backups \;

cylon17
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.