%3F.png)
Я использую gnu-parallel.
Я предполагаю, что проблема связана с моей средой. Чего я хочу добиться:Пытаюсь выполнить команду на нескольких машинах.
Для этого я создал sshloginfile (подходящее название ~/.parallel/sshloginfile) с некоторыми записями типа:
# define hostgroup debian
@debian/5-1.p
@debian/6-1.p
@debian/7-1.p
...
# define hostgroup qnap with only 1 cpu
1/@qnap/4-1.a
# define hostgroup macos
@macos/33-1.w
# local computer
@macos/:
Имена (5-1.p, 6-1.p, ...) за группами хостов (@debian, @qnap, ...) являются записями в ~/.ssh/config. Все соединения ssh аутентифицируются с помощью аутентификации открытого ключа.
Я хотел бы увидеть время безотказной работы с помощью простой команды:parallel --jobs 0 --nonall --tag --slf .. uptime
работает прекрасно
: 19:25 up 4 days, 23:02, 3 users, load averages: 2.14 1.86 1.79
5-1.p 19:25:27 up 23 days, 18:54, 0 users, load average: 0.05, 0.13, 0.18
6-1.p 19:26:04 up 20:05, 0 users, load average: 0.03, 0.08, 0.10
4-1.a sh: line 0: exec: perl: not found
за исключением одного хоста (4.1-a), который представляет собой систему хранения данных QNAP.
К моему удивлению, команданетиспользуя sshloginfile, но вместо этого напрямую обращаясь к этому серверуделаетработа:parallel --jobs 0 --nonall --tag ssh 4-1.a uptime
выходы:
19:28:37 up 16 days, 8:24, load average: 0.72, 0.61, 0.59
Итак, похоже, что есть зависимость/предпосылка, которая должна быть выполнена, если устройство адресуется через sshloginfile, что в противном случае не является необходимым. И это, похоже, perl, который на самом деле не установлен в системе хранения QNAP.Кто-нибудь знает, почему так?
Версия параллельного: GNU parallel 20181222
версия ОС хоста: Darwin 18.2.0 Версия ядра Darwin 18.2.0: Пн Ноя 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64 x86_64 [macOS 10.14.2]
версия ОС рабочих устройств: Linux 4.14.90+ #1183 Пт Дек 21 13:50:04 GMT 2018 armv6l версия ОС GNU/Linux
"проблемного" устройства 4-1.a: Linux 3.4.6 #1 Ср Янв 2 07:02:07 CST 2019 armv5tel неизвестно
Приложение: На странице руководства указано:
ЗАВИСИМОСТИ
GNU parallel использует Perl и модули Perl Getopt::Long, IPC::Open3, Symbol, IO::File, POSIX и File::Temp. Для удаленного использования он также использует rsync с ssh.
решение1
С 20150122 GNU Parallel зависел от perl
установки на удаленной системе.
То, что вы видите, наводит меня на мысль, что на qnap
сервере не установлен Perl.
Если вы запустите:
parallel -vvS server echo ::: foo
parallel -vvS server --wd ... --trc {}.foo touch {}.foo ::: *
вы увидите, что GNU Parallel на самом деле работает. Как вы видите, это довольно сложно и включает в себя скрипт Perl. Вот почему Perl нужен на удаленной системе.
Более подробную информацию об этом читайте здесь:https://www.gnu.org/software/parallel/parallel_design.html#The-remote-system-wrapper
Я предполагаю, что:
parallel -S 1/4-1.a echo ::: foo
также приведет к:
sh: line 0: exec: perl: not found
Поэтому, вероятно, решением будет установить Perl на qnap
.