2

Я использую Ansible для настройки некоторой конфигурации на нескольких узлах, и в рамках этой настройки мне нужно разделить один большой файл на n строк и скопировать каждую часть в удаленный файл без создания локальной копии каждого чанка (например, команда bash split). делает). Ansible не может сделать это по умолчанию (или я просто еще не выяснил, как это сделать), поэтому я решил использовать GNU Parallel. Я обнаружил здесь, что копирование со стандартного ввода может быть легко сделано следующим образом:

~$ echo "Lots of data" | ssh user@example.com 'cat > big.txt'

Но я хочу сделать это одновременно нескольким хозяевам! Итак, вот пример ввода:

~$ cat hosts.txt
1.1.1.1
2.2.2.2
3.3.3.3

~$ cat data.txt
lots
of
...
lines

Я вычисляю количество строк на узел, выполняя "wc -l" и деля второе число на первое. Так что, в принципе, следующим шагом будет что-то вроде этого:

~$ cat data.txt | parallel -S `cat hosts.txt | tr "\n" ","` -N $LINES_PER_HOST --pipe "ssh $HOST 'cat > /data/piece.txt'"

но как я могу запустить одну команду для каждого хоста, чем я должен заменить $ HOST? Я думал о комбинировании двух входов (один из них является хостом), но все еще не знал, как это сделать.

Буду очень признателен за любые мысли.

1 ответ1

1

Работает с версии 20150922:

parallel-20150922 -a bigfile --roundrobin  --pipepart --slf hosts.txt -j1 'cat > giraf'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .