0

我有一个简单的 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 。

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

感谢帮助!

4

2 回答 2

1

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

于 2013-10-25T08:44:31.700 回答
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

于 2014-10-15T17:40:03.333 回答