【发布时间】:2021-01-05 01:53:46
【问题描述】:
我正在尝试同步一个需要近 3 小时才能完全同步的 S3 存储桶。
sync-bucket.sh:
nohup aws s3 sync "$source_bucket/$folder/" "s3://$destination_bucket/" \
--profile abc --acl bucket-owner-full-control --sse "aws:kms" \
--sse-kms-key-id "$KEY_ARN" > /var/log/$folder.log 2>&1 &
echo "Successfully triggered the sync job"
我希望使用 AWS SSM 发送命令触发同步作业,如下所示:
trigger.sh:
COMMAND=$(aws ssm send-command --document-name "AWS-RunShellScript" \
--targets "Key=instanceids,Values=${RECOVERY}" \
--parameters '{"executionTimeout":["10800"],"commands":["/opt/scripts/sync-bucket.sh"]}' \
--output-s3-bucket-name "some-bucket" \
--timeout-seconds 10800 \
| jq -r '.Command.CommandId')
我的观察是 SSM 在将执行标记为“成功”之前等待此后台作业完成。有没有一种方法可以触发后台作业并让 SSM 完成执行,而无需等待后台作业完成?
或者有更好的方法吗?我基本上是在尝试自动化这里的流程,并且很高兴让作业按需在后台运行,而无需登录到实例并手动运行命令。
感谢您的宝贵时间。
【问题讨论】:
-
旁注:
aws命令包含一个--query参数,通常不需要使用jq。 -
你试过通过nohup运行脚本吗?
-
@Marcin 是的,我正在使用 nohup。
-
@JohnRotenstein 感谢您的指出,会继续阅读。
标签: bash amazon-web-services shell aws-cli aws-ssm