Bash 我们可以通过AWS SSM作为后台进程运行命令吗?
我正在尝试同步一个S3存储桶,它需要将近3个小时才能完全同步 sync-bucket.sh:Bash 我们可以通过AWS SSM作为后台进程运行命令吗?,bash,amazon-web-services,shell,aws-cli,aws-ssm,Bash,Amazon Web Services,Shell,Aws Cli,Aws Ssm,我正在尝试同步一个S3存储桶,它需要将近3个小时才能完全同步 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 &q
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 send命令触发同步作业,如下所示:
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在不必等待后台作业完成的情况下完成执行
还是有更好的方法?我基本上是在尝试自动化这个过程,并乐于让作业在后台按需运行,而无需登录实例并手动运行命令
谢谢您的时间。问题不在于SSM正在等待后台命令完成,而是因为您的
nohup
命令等待输入,所以您的命令实际上没有放到后台。要解决,用nohup whatever\u your\u command\u是&
替换nohup whatever\u your\u command\u是/dev/null>/dev/null&
旁注:aws
命令包含一个--query query
参数,通常不需要使用jq
。您是否尝试过通过运行脚本?@Marcin yes我正在使用“不,谢谢你的指点,约翰·罗滕斯坦会读出来的。”。