gpt4 book ai didi

bash - 在远程机器上同时执行脚本并等待进程完成

转载 作者:行者123 更新时间:2023-11-29 09:31:31 26 4
gpt4 key购买 nike

最初的想法是将脚本复制到每个 IP 地址,这将在每台机器上执行 yum-install 一些 RPM 和一些配置步骤。由于 yum-install 大约需要 20 分钟,因此希望在每台机器上同时进行安装,然后等待所有派生的进程完成,然后再继续。

#!/bin/bash

PEM=$1
IPS=$2

for IP in IPS; do
scp -i $PEM /tmp/A.sh ec2-user@IP:/tmp
ssh -i $PEM ec2-user@$IP chmod 777 /tmp/A.sh
done

for IP in IPS; do
ssh -t -i $PEM ec2-user@$IP sudo /tmp/A.sh &
done

wait
echo "IPS have been configured."
exit 0

在后台对三个 IP 地址执行远程 sudo execute 命令会产生三个错误消息。显然,我的逻辑有问题。

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo

所有机器都是CentOS 6.5

最佳答案

你需要告诉ssh不要从标准输入读取

ssh -n -t root@host "sleep 100" &

举个例子

drao@darkstar:/tmp$ cat a
date
ssh -n -t me@host1 "sleep 100" &
ssh -n -t me@host2 "sleep 100" &
wait
date
darkstar:/tmp$ . ./a
Mon May 16 15:32:16 CEST 2016
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

[1]- Done ssh -n -t me@host1 "sleep 100"
[2]+ Done ssh -n -t me@host2 "sleep 100"
Mon May 16 15:33:57 CEST 2016
darkstar:/tmp

等待了整整 101 秒。显然我有 ssh key ,所以我没有收到输入密码的提示。

但是查看您的输出,远程机器上的 sudo 似乎失败了……您甚至可能不需要 -n。

关于bash - 在远程机器上同时执行脚本并等待进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37193667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com