繁体   English   中英

问题无法在 bash 脚本中执行所有 bash 脚本

[英]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需要您输入一些内容,这将不起作用。

如何等待你的后台进程? 只需使用内置的waithelp 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM