我有一个简单的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
感谢您的帮助!
答案 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"
}
}
}
}
答案 1 :(得分:0)
在堆栈创建或更新操作期间,AWS :: CloudFormation :: Init默认以root用户身份运行。包含ruby 2.0的bin目录(通常是亚马逊发布的AMI中的情况)可能不是来自PATH,或者使用ruby的完整位置,例如/ usr / local / bin / ruby。