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

chr*_*etd 4 line-endings amazon-ec2 amazon-web-services aws-code-deploy

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

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

[stderr]bash: /opt/codedeploy-agent/deployment-root/.../scripts/stop.sh: /bin/sh^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

~$ md5sum stop.sh
d41d8cd98f00b204e9800998ecf8427e stop.sh
~$ dos2unix stop.sh
~$ md5sum stop.sh
d41d8cd98f00b204e9800998ecf8427e stop.sh
Run Code Online (Sandbox Code Playgroud)

如果我在十六进制编辑器中打开文件,行结尾看起来像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脚本中删除第一行/bin/sh,不会改变任何内容.我想sudo ln -s /bin/sh /bin/sh^M应该为一个肮脏的快速修复工作,但我想要一个更清洁的解决方案.:/

[更新2]:我发现由于某种原因,CodeDeploy在实例上使用了错误的部署档案.屏幕截图如果我去/opt/codedeploy-agent/.../d-GBQV1EHSE,这确实是一个旧的部署,出现了Windows样式行返回问题......但是CodeDeploy不应该使用此存档/opt/codedeploy-agent/.../d-XWEJW9SVE并且包含有效的存档.

谢谢

小智 5

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

因此更新配置解决了他的问题.