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

Аскер заявил, что в конечном итоге они добавили необходимые пути в начало файла crontab. Я посчитал полезным направить других, ищущих в этой теме, немного больше информации о решении.

См .: Причины, по которым crontab не работает

Цитата:

Cron передает минимальный набор переменных окружения вашим работам. Чтобы увидеть разницу, добавьте фиктивную работу, например:

          • env> / tmp / env.output li> ul> li> ul> li> ul>

        Подождите /tmp/env.output чтобы быть созданным, затем удалите работу снова. Теперь сравните содержимое /tmp/env.output с выводом команды env, запущенной на вашем обычном терминале.

        Общей «ошибкой» здесь является то, что переменная окружения PATH отличается. Может быть, ваш скрипт cron использует команду somecommand из / opt / someApp / bin, которую вы добавили в PATH в / etc / environment? cron не читает этот файл, поэтому запуск некоторых команд из вашего скрипта завершится неудачно при запуске с cron, но будет работать при запуске в терминале.

        blockquote>

        ...

        Вы также можете установить переменную PATH в файле crontab, которая будет применяться ко всем заданиям cron. Э.Г.

        blockquote>
        > PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        > 
        > 15 1 * * * backupscript --incremental /home /root
        

3
задан 14.04.2017, 01:24

3 ответа

[Ответ Оли пришел, когда я печатал]

Альтернативой clusterss является parallel-scp. Он является частью пакета pssh

. Вам необходимо предоставить список хостов в текстовом файле (например, hosts.txt), а затем вы выполните:

[110 ]

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

PS: настройка авторизации на основе ключей, конечно, сделает это намного проще, но я подозреваю, что ваш ключ распределен по 200 системам на 1-м месте, возможно, поэтому вы задаете этот вопрос ...

0
ответ дан 24.04.2019, 16:14

В качестве альтернативы вы можете сохранить его на основе толчка. Самым простым способом для этого является написание сценария, который:

  1. Перебирает список серверов
  2. Подключается к серверу и копирует файлы (здесь есть две опции): [ 1113]

    1. Использует sshfs для локального монтирования удаленной файловой системы, cp / rsync файлы, fusermount -u каталог, в который вы ее монтировали (для размонтирования удаленной системы). Продолжить.
    2. Просто используйте сетевые возможности rsync для копирования файлов.

      rsync /localdir/ user@remote:/remotedir
      
0
ответ дан 24.04.2019, 16:14
1118 Я понимаю, что вы, вероятно, хотите только чего-то простого, но есть десятки способов сделать это. Но сначала мы хотим иметь возможность контролировать все компьютеры одновременно.

Это может показаться странным направлением, но это сэкономит вам время, когда вы захотите отправить завершение работы, перезагрузку, обновление на все компьютеры.

clusterssh

Давайте установим clusterssh и запустим команду для подключения ко всем нашим серверам одновременно (это может быть невозможно для 200 одновременно - у меня нет 200 компьютеров для тестирования включите!)

sudo apt-get install clusterssh
cssh user@first_computer:port user@second_computer:port ...

Это приведет к появлению небольших окон вывода для каждого соединения (почему я говорю, что 200 может быть растяжкой) и одного глобального диалога ввода. Оттуда вы можете отправить одну и ту же команду всем своим серверам.

Если вы хотите сделать это из командной строки, и это может поддерживать 200 соединений, вы можете посмотреть флаг -a для cssh. Вы можете бросить каждому серверу команду (или строку команд). Он подключится, выполнит и закроет соединение.

cssh -a 'cd directory; ls'  user@first_computer:port user@second_computer:port 

Вы можете упростить ваши соединения, используя мощную конфигурацию clusterssh. Откройте man cssh и пройдите в секцию FILES. Он объясняет, как вы можете создать файл /etc/clusters, чтобы позволить вам быстро создавать группы (называемые тегами), например:

clusters = <tag1> <tag2> <tag3>
<tag1> = host1 host2 host3
<tag2> = user@host4 user@host5 host6
<tag3> = <tag1> <tag2>

Затем вы можете сделать:

cssh -T 'tag2' -a 'cd directory; ls'

Использовать Центральный репозиторий

Я не имею в виду дебо-репо (но это тоже возможно, я думаю), скорее что-то вроде git или brz. Это может быть что-то простое, например, веб-сервер или сетевой ресурс. Если пропускная способность сети имеет узкие места, то что-то вроде торрент-сервера может быть даже лучшим курсом (именно так Facebook обновляет все их узлы)

Скажите вашей сети, чтобы загрузить файлы

Отсюда это просто соединяя точки. Используя cssh, вы просто скажете всем своим компьютерам извлечь файл и делать с ним все, что нужно.

1127 Я предлагаю вам начать с малого. Получите общий доступ к файлу, а затем попробуйте простой кластер из пары компьютеров и посмотрите, как он работает. Расширьте это.

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

0
ответ дан 24.04.2019, 16:14

Теги

Похожие вопросы