【问题标题】:Can we run command as background process through AWS SSM?我们可以通过 AWS SSM 作为后台进程运行命令吗?
【发布时间】: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


【解决方案1】:

问题不在于 SSM 正在等待您的后台命令完成,而是您的命令实际上并未置于后台,因为您的 nohup 命令等待输入。要修复,请将nohup whatever_your_command_is & 替换为nohup whatever_your_command_is < /dev/null 2> /dev/null > /dev/null &

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多