[英]Issue unable to execute all bash script within bash script
我有以下 bash 脚本,它并行运行两个进程(内部有两个 bash 脚本),我需要两个 bash 脚本,两个脚本完成后并行运行。我需要总时间执行但问题是第一个 bash 脚本。/cloud.sh 没有运行,但是当我单独运行它时,它运行成功,并且我正在运行具有 sudo 权限的主要测试 bash 脚本。
测试
#!/bin/bash
start=$(date +%s%3N)
./cloud.sh &
./client.sh &
end=$(date +%s%3N)
echo "Time: $((duration=end-start))ms."
客户端.sh
#!/bin/bash
sudo docker build -t testing .'
Cloud.sh
#!/bin/bash
start=$(date +%s%3N)
ssh kmaster@192.168.101.238 'docker build -t testing .'
end=$(date +%s%3N)
echo "cloud: $((duration=end-start)) ms"
后台进程将无法从您那里获得键盘输入。 一旦它尝试这样做,它将收到一个SIGTTIN
信号,该信号将停止它(直到它被带回前台)。
我怀疑你的一个或两个脚本要求你输入一些东西,通常是密码。
解决方案 1:配置 sudo 和 ssh 以使它们无密码。 使用 ssh 这很容易(ssh 密钥),使用 sudo 这是一个安全风险。 如果docker build
需要你输入一些东西,你注定要失败。
解决方案 2:仅使 ssh 脚本 ( Cloud.sh
) 无密码,并将 sudo 脚本 ( Client.sh
) 保留在前台。 同样,如果远程docker build
需要您输入一些内容,这将不起作用。
如何等待你的后台进程? 只需使用内置的wait
( help wait
)。
解决方案 2 的示例:
#!/bin/bash
start=$(date +%s%3N)
./cloud.sh &
./client.sh
wait
end=$(date +%s%3N)
echo "Time: $((duration=end-start))ms."
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.