Was sind die Anforderungen von GNU-Parallel an/für ein Remote-Gerät, das über SSH (und Public-Key-Authentifizierung) kontaktiert wird?

Was sind die Anforderungen von GNU-Parallel an/für ein Remote-Gerät, das über SSH (und Public-Key-Authentifizierung) kontaktiert wird?

Ich verwende GNU-Parallel.

Ich gehe davon aus, dass ein Problem mit meiner Umgebung vorliegt.

Was ich erreichen möchte:
Versuch, einen Befehl auf mehreren Maschinen auszuführen.
Dazu habe ich eine Sshlogin-Datei (treffend benannt ~/.parallel/sshloginfile) mit einigen Einträgen wie diesen erstellt:

#  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/:

Die Namen (5-1.p, 6-1.p, ...) hinter den Hostgruppen (@debian, @qnap, ...) sind Einträge in ~/.ssh/config. Alle SSH-Verbindungen werden über Public-Key-Authentifizierung authentifiziert.

Als einfachen Befehl möchte ich die Betriebszeit sehen:

parallel --jobs 0 --nonall --tag --slf .. uptime

funktioniert wunderbar

:   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

mit Ausnahme eines Hosts (4.1-a), bei dem es sich um ein QNAP-Speichersystem handelt.

Zu meiner Überraschung der BefehlnichtVerwendung der sshlogin-Datei, sondern direkte Ansprache dieses einen Serverstutarbeiten:

parallel --jobs 0 --nonall --tag ssh 4-1.a uptime

Ausgänge:

19:28:37 up 16 days,  8:24, load average: 0.72, 0.61, 0.59

Es scheint also eine Abhängigkeit/Voraussetzung zu geben, die erfüllt sein muss, wenn ein Gerät über eine sshlogin-Datei angesprochen wird, was sonst nicht notwendig ist. Und es scheint Perl zu sein, das tatsächlich nicht auf dem QNAP-Speichersystem installiert ist.
Hat jemand eine Ahnung, warum das so sein könnte?

Version von parallel: GNU parallel 20181222
Betriebssystemversion des Hosts: Darwin 18.2.0 Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64 x86_64 [macOS 10.14.2]
Betriebssystemversion funktionierender Geräte: Linux 4.14.90+ #1183 Fri Dec 21 13:50:04 GMT 2018 armv6l GNU/Linux
Betriebssystemversion des „problematischen“ Geräts 4-1.a: Linux 3.4.6 #1 Wed Jan 2 07:02:07 CST 2019 armv5tel unbekannt

Nachtrag: Auf der Manpage steht:
ABHÄNGIGKEITEN
GNU parallel verwendet Perl und die Perl-Module Getopt::Long, IPC::Open3, Symbol, IO::File, POSIX und File::Temp. Für die Remote-Nutzung wird außerdem rsync mit ssh verwendet.

rsync ist auf dem „problematischen“ Gerät installiert.

Antwort1

GNU Parallel ist seit dem 22.01.2015 darauf angewiesen, perlauf dem Remote-System installiert zu sein.

Was Sie sehen, lässt für mich darauf schließen, dass auf dem qnapServer Perl nicht installiert ist.

Wenn du läufst:

parallel -vvS server echo ::: foo
parallel -vvS server --wd ...  --trc {}.foo touch {}.foo ::: *

Sie werden sehen, was GNU Parallel tatsächlich ausführt. Wie Sie sehen, ist das ziemlich komplex und beinhaltet ein Perl-Skript. Aus diesem Grund wird Perl auf dem Remote-System benötigt.

Weitere Einzelheiten hierzu finden Sie unter:https://www.gnu.org/software/parallel/parallel_design.html#The-remote-system-wrapper

Meine Vermutung ist Folgendes:

parallel -S 1/4-1.a echo ::: foo

wird außerdem Folgendes zur Folge haben:

sh: line 0: exec: perl: not found

Die Lösung besteht wahrscheinlich darin, Perl zu installieren qnap.

verwandte Informationen