4

语境

给定 AWS 的 Elastic Beanstalk 上的一个简单节点应用程序(如eb-node-express-sample)和如下默认nodecommand.config文件:

option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeCommand: npm start

问题

如何调用多个 bash 命令来代替npm start?我希望能够做到以下几点:

    NodeCommand: echo 'Hello' && npm start

或者:

    NodeCommand: |
      echo 'Hello'
      npm start

但似乎第一个单词之后的所有内容实际上都是作为单个参数传入的,导致以下输出/var/log/nodejs/nodejs.log

'Hello' && npm start
'Hello' && npm start
'Hello' && npm start
...

# Logged repeatedly as the server tries and fails to start,
# apparently invoking `echo "'Hello' && npm start"` each time...

有没有办法绕过这个愚蠢的限制并直接运行多个 bash 命令?

动机

start我有一个 Lerna 应用程序,它在根目录中没有任何有用的脚本,而是startpackages/api/. 我在这里特别需要能够在运行之前更改目录start,但我正在寻找一个通用解决方案来解决运行多个命令的问题。

4

1 回答 1

3

我的解决方法是将脚本添加到package.json

"scripts": {
  "start": "node app.js",
  "start:eb": "echo 'Hello' && npm start"
}

用法:

option_settings:
  aws:elasticbeanstalk:container:nodejs:
    NodeCommand: npm run start:eb

万一它与其他人有关,我来到这里是因为502 Bad Gatewaynginx 的一个模棱两可的错误,因为服务器没有启动,但/var/log/nodejs/nodejs.log. 我终于意识到这是由于 AWS 破坏了 NodeCommand。

于 2018-06-20T00:28:16.393 回答