在AWS的Elastic Beanstalk上提供一个简单的Node应用程序(例如eb-node-express-sample),并使用默认的nodecommand.config
文件,如下所示:
option_settings:
aws:elasticbeanstalk:container:nodejs:
NodeCommand: npm start
如何代替npm start
调用多个bash命令?我希望能够执行以下操作:
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命令吗?
我有一个Lerna应用,该应用没有在根目录中包含任何有用的start
脚本,而在start
中具有一个packages/api/
脚本。我的特别需要是能够在运行start
之前更改目录,但是我正在寻找一种通用的解决方案来解决运行多个命令的问题。
答案 0 :(得分:0)
我的解决方法是将脚本添加到package.json
:
"scripts": {
"start": "node app.js",
"start:eb": "echo 'Hello' && npm start"
}
用法:
option_settings:
aws:elasticbeanstalk:container:nodejs:
NodeCommand: npm run start:eb
万一它与其他人有关,我之所以来到这里,是因为nginx出现了一个模糊的502 Bad Gateway
错误,原因是服务器未启动,但/var/log/nodejs/nodejs.log
中却完全没有启动。我终于意识到这是由于AWS破坏了NodeCommand。