AWSCloudFormation - cfn-init无法运行命令`ruby`

时间:2013-10-24 10:46:05

标签: ruby bootstrapping amazon-cloudformation

我有一个简单的cloudformation脚本,我试图在启动时运行ruby脚本作为后台进程。

脚本的相关部分是

"AWS::CloudFormation::Init" : {
                    "config" : {
                        "sources" : {
                            "/etc/scripts" : "http://bootstrap-artifacts.s3.amazonaws.com/scripts.zip"
                        },
                        "commands" : {
                          "1" : {
                            "command" : "cd /etc/scripts/agent"
                          },
                          "2-start" : {
                            "command" : "nohup ruby agent.rb &"
                          }
                        }
                    }
                }

确认已下载zip文件并且脚本存在于正确的目录中。此外,我的AMI已为所有用户安装 ruby​​ 2.0.0

我继续在 \ var \ log \ cfn-init.log 文件中获取nohup: failed to run command 'ruby': No such file or directory

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

问题是命令被孤立执行的结果。您的第一个命令是更改目录,但这与您的第二个命令无关。解决方案是使用'cwd'键作为第二个命令。例如:

"AWS::CloudFormation::Init" : {
                    "config" : {
                        "sources" : {
                            "/etc/scripts" : "http://bootstrap-artifacts.s3.amazonaws.com/scripts.zip"
                        },
                        "commands" : {
                          "2-start" : {
                            "command" : "nohup ruby agent.rb &",
                            "cwd" : "/etc/scripts/agent"
                          }
                        }
                    }
                }

更多信息:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html#aws-resource-init-commands

答案 1 :(得分:0)

在堆栈创建或更新操作期间,AWS :: CloudFormation :: Init默认以root用户身份运行。包含ruby 2.0的bin目录(通常是亚马逊发布的AMI中的情况)可能不是来自PATH,或者使用ruby的完整位置,例如/ usr / local / bin / ruby​​。