使用 pm2 执行 yarn start 会出错,而 npm start 工作正常
Using pm2 to do yarn start gives error while npm start works fine
我有一个 NodeJs 微服务。做 yarn start 通常工作得很好。当我尝试使用 pm2 将其作为后台服务启动时,遇到以下问题:
/Users/sairamk/.pm2/logs/api-error-21.log last 15 lines:
21|api | /usr/local/Cellar/yarn/0.27.5_1/bin/yarn:2
21|api | PREFIX="/usr/local" exec "/usr/local/Cellar/yarn/0.27.5_1/libexec/bin/yarn.js" "$@"
21|api | ^^^^
21|api |
21|api | SyntaxError: Unexpected identifier
21|api | at createScript (vm.js:74:10)
21|api | at Object.runInThisContext (vm.js:116:10)
21|api | at Module._compile (module.js:533:28)
21|api | at Object.Module._extensions..js (module.js:580:10)
21|api | at Module.load (module.js:503:32)
21|api | at tryModuleLoad (module.js:466:12)
21|api | at Function.Module._load (module.js:458:3)
21|api | at Object.<anonymous> (/usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js:70:21)
21|api | at Module._compile (module.js:569:30)
21|api | at Object.Module._extensions..js (module.js:580:10)
我使用的PM2命令:
pm2 start yarn --name api -- start
虽然 npm start 相同,但可以正常使用以下命令:
pm2 start npm --name api -- start
尝试探索多种可能性。我做错了什么?
您的 yarn 命令指向 bash 脚本 /usr/local/Cellar/yarn/0.27.5_1/bin/yarn
而不是同一文件夹中的 yarn.js
。通过手动 运行 类似
pm2 start /usr/local/Cellar/yarn/0.27.5_1/bin/yarn.js --name api -- start
它应该按预期工作。只需将路径调整为当前位置即可。在我的例子中是 /usr/share/yarn/bin/yarn.js
.
作为旁注:与 npm 相比,像这样执行 yarn 占用的内存几乎是原来的两倍。我不知道确切的原因,但我会坚持使用 npm for pm2,因为理论上它应该没有任何区别...
您收到的错误是因为 bash 脚本 (yarn
) 正在使用节点执行...
因为pm2的默认解释器设置为node
.
对于 运行 纱线,您必须将解释器设置为 bash
:
shell:
pm2 start yarn --interpreter bash --name api -- start
或者当您使用 ecosystem.config.js
:
module.exports = {
apps : [{
name : 'yarn',
script : 'yarn',
args : 'start',
interpreter: '/bin/bash',
env: {
NODE_ENV: 'development'
}
}]
};
我有一个 NodeJs 微服务。做 yarn start 通常工作得很好。当我尝试使用 pm2 将其作为后台服务启动时,遇到以下问题:
/Users/sairamk/.pm2/logs/api-error-21.log last 15 lines:
21|api | /usr/local/Cellar/yarn/0.27.5_1/bin/yarn:2
21|api | PREFIX="/usr/local" exec "/usr/local/Cellar/yarn/0.27.5_1/libexec/bin/yarn.js" "$@"
21|api | ^^^^
21|api |
21|api | SyntaxError: Unexpected identifier
21|api | at createScript (vm.js:74:10)
21|api | at Object.runInThisContext (vm.js:116:10)
21|api | at Module._compile (module.js:533:28)
21|api | at Object.Module._extensions..js (module.js:580:10)
21|api | at Module.load (module.js:503:32)
21|api | at tryModuleLoad (module.js:466:12)
21|api | at Function.Module._load (module.js:458:3)
21|api | at Object.<anonymous> (/usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js:70:21)
21|api | at Module._compile (module.js:569:30)
21|api | at Object.Module._extensions..js (module.js:580:10)
我使用的PM2命令:
pm2 start yarn --name api -- start
虽然 npm start 相同,但可以正常使用以下命令:
pm2 start npm --name api -- start
尝试探索多种可能性。我做错了什么?
您的 yarn 命令指向 bash 脚本 /usr/local/Cellar/yarn/0.27.5_1/bin/yarn
而不是同一文件夹中的 yarn.js
。通过手动 运行 类似
pm2 start /usr/local/Cellar/yarn/0.27.5_1/bin/yarn.js --name api -- start
它应该按预期工作。只需将路径调整为当前位置即可。在我的例子中是 /usr/share/yarn/bin/yarn.js
.
作为旁注:与 npm 相比,像这样执行 yarn 占用的内存几乎是原来的两倍。我不知道确切的原因,但我会坚持使用 npm for pm2,因为理论上它应该没有任何区别...
您收到的错误是因为 bash 脚本 (yarn
) 正在使用节点执行...
因为pm2的默认解释器设置为node
.
对于 运行 纱线,您必须将解释器设置为 bash
:
shell:
pm2 start yarn --interpreter bash --name api -- start
或者当您使用 ecosystem.config.js
:
module.exports = {
apps : [{
name : 'yarn',
script : 'yarn',
args : 'start',
interpreter: '/bin/bash',
env: {
NODE_ENV: 'development'
}
}]
};