Bash 我们可以通过AWS SSM作为后台进程运行命令吗?

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

我正在尝试同步一个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 "$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我正在使用“不,谢谢你的指点,约翰·罗滕斯坦会读出来的。”。