CodeDeploy部署失败:错误的解释器/ bin / sh ^ M.

时间:2016-04-07 14:47:23

标签: amazon-web-services amazon-ec2 line-endings aws-code-deploy

我有一个Meteor应用程序,我正在使用CodeDeploy(本地构建 - > S3 - > CodeDeploy - > EC2)在EC2实例上部署。

我遇到了一个我一周前没遇过的问题:在创建部署时,它在ApplicationStop步骤失败并显示消息

project = MYPROJECT AND status = Done AND Sprint is not empty

我知道这应该是Windows样式行结尾的问题,但它看起来不是

[stderr]bash: /opt/codedeploy-agent/deployment-root/.../scripts/stop.sh: /bin/sh^M: bad interpreter: No such file or directory

如果我在十六进制编辑器中打开文件,则行结尾看起来像 0x0a ,而不是 0x0d0a (Windows样式)。


    00000000: 2321 2f62 696e 2f73 680a 736f 7572 6365  #!/bin/sh.source
    00000010: 202f 686f 6d65 2f65 6332 2d75 7365 722f   /home/ec2-user/
    ...

为了确保,我从S3下载了部署档案,将其解压缩并再次检查 - 行结尾确实如上所述。

这很奇怪,因为一周前我没有遇到问题,如果我尝试部署一周前成功部署的版本,就会发生同样的问题(!!)......即使它正在工作当时。

帮助表示赞赏!

[更新] :从我的 stop.sh 脚本中移除第一行~$ md5sum stop.sh d41d8cd98f00b204e9800998ecf8427e stop.sh ~$ dos2unix stop.sh ~$ md5sum stop.sh d41d8cd98f00b204e9800998ecf8427e stop.sh ,不会改变任何内容。我想/bin/sh应该用于快速修复,但我想要一个更清洁的解决方案。 :/

[更新2] :我发现由于某种原因,CodeDeploy在实例上使用了错误的部署档案。 Screenshot如果我转到sudo ln -s /bin/sh /bin/sh^M,这确实是一个带有Windows样式行返回问题的旧部署......但是CodeDeploy不应该使用此存档/opt/codedeploy-agent/.../d-GBQV1EHSE存在且包含有效档案

由于

1 个答案:

答案 0 :(得分:5)

在与christophetd讨论了一下之后,我们发现配置中存在一个问题,指向另一个(旧的)stop.sh,它确实有一个Windows风格的CRLF。

更新配置从而解决了他的问题。