我正在使用这个脚本
[test@sys-master ~]$ parallel -k -j 100 sshpass -p test1213'!' ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -q [email protected].{} "cat /proc/loadavg | awk -F \" \" '{ print a,\$1,b }' a="'"$(hostname)"'" b=\$(nproc)" ::: {41..46}.{1..100}
为什么要返回本地值?我需要远程(节点)值
sys-master 9.87 24
sys-master 9.99 24
sys-master 11.85 24
sys-master 11.67 24
sys-master 10.75 24
sys-master 8.00 24
sys-master 10.27 24
sys-master 11.94 24
sys-master 10.28 24
sys-master 10.94 24
sys-master 12.02 24
sys-master 9.55 24
sys-master 11.43 2
答案1
这是由于引用。
GNU Parallel 不是 shell 的一部分,因此每个输入如果要被 shell 解释就必须加引号。由于您从 shell(将解释输入)调用 GNU Parallel 并且 GNU Parallel 启动一个 shell(解释输入),因此它必须被引用两次,除非您使用-q
,只有当您需要完整的行时才可以使用它。被引用(即没有组合命令)。
正如你所知,它很快就会变得混乱。 :)
所以一般建议是定义一个 bash 函数并调用它。
myloadavg() {
sshpass -p test1213'!' ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -q [email protected].$1 "cat /proc/loadavg | awk -F \" \" '{ print a,\$1,b }' a="'"\$(hostname)"'" b=\$(nproc)"
}
export -f myloadavg
parallel myloadavg ::: {41..46}.{1..100}