
我正在使用 gnu 並行。
我認為我的環境有問題。 我想要實現的目標:嘗試在多台機器上執行命令。
為此,我創建了一個 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/:
主機群組(@debian、@qnap、...)後面的名稱(5-1.p、6-1.p、...)是 ~/.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,其實威聯通儲存系統上並沒有安裝。有人知道為什麼會這樣嗎?
平行版本:GNU並行20181222
主機作業系統版本: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]
工作設備的作業系統版本:Linux 4.14.90+ #1183 Fri Dec 21 13:50:04 GMT 2018 作業系統
版本有問題「設備 4-1.a:Linux 3.4.6 #1 Wed Jan 2 07:02:07 CST 2019 armv5tel 未知
附錄:手冊頁指出:
依賴項
GNU 並行使用 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
所以解決方案可能是在qnap
.