Linux bash aws命令不会等待完成

Linux bash aws命令不会等待完成,linux,bash,amazon-web-services,amazon-s3,amazon-ec2,Linux,Bash,Amazon Web Services,Amazon S3,Amazon Ec2,我在本地机器上有一个bash脚本,它在终止之前发送一系列命令在ec2上运行一些脚本。下面是一个剪贴画: cat ec2-commands.sh aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids "${instanceid}" --parameters commands=["cd /home/ec2-user","aws s3 cp

我在本地机器上有一个bash脚本,它在终止之前发送一系列命令在ec2上运行一些脚本。下面是一个剪贴画:

cat ec2-commands.sh
aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids "${instanceid}" --parameters commands=["cd /home/ec2-user","aws s3 cp s3://test/scripts/run_model1.sh ."]
aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids "${instanceid}" --parameters commands=["sudo bash /home/ec2-user/run_model1.sh"]
aws ec2 terminate-instances --instance-ids "${instanceid}"
“run_model1.sh”脚本需要约3小时才能完成。但是,在本地计算机上,在终止实例之前不必等待“run_model1.sh”完成。换句话说,本地计算机发送命令以运行“run_model1.sh”,并且在ec2实例开始运行脚本之后,这将被视为“成功”发送命令,并且本地脚本发送命令以终止实例不久后执行的操作。我如何能有某种“观看”或“等待”,使脚本看起来像以下内容:

cat ec2-commands.sh
aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids "${instanceid}" --parameters commands=["cd /home/ec2-user","aws s3 cp s3://test/scripts/run_model1.sh ."]
aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids "${instanceid}" --parameters commands=["sudo bash /home/ec2-user/run_model1.sh"]
[command here to wait for 'run_model1.sh' on the ec2 instance to finish]
aws ec2 terminate-instances --instance-ids "${instanceid}"

或者,ssm send命令是否有一个选项可以等待脚本在ec2实例上完成?

您可以使用以下命令等待命令完成:

但是,有一个100秒的硬限制,远远低于您所说的脚本执行所需的3小时

为什么不只发送一个执行实例需要执行的所有操作的命令,然后在末尾添加一个
shutdown-h now
命令呢



否则,您可能会让Lambda函数之类的函数发送下一个命令。

您可以等待命令完成,使用:

但是,有一个100秒的硬限制,远远低于您所说的脚本执行所需的3小时

为什么不只发送一个执行实例需要执行的所有操作的命令,然后在末尾添加一个
shutdown-h now
命令呢



否则,您可能需要使用Lambda函数之类的函数发送下一个命令。

这需要awscli 1.19+这需要awscli 1.19+
aws ssm wait command-executed