我正在通过 PM2 运行我的 Nodejs 代码。对于我的项目,我需要运行相同代码的多个 Nodejs 实例。所以我创建了下一个脚本“myscript.sh”:
cd ~/myproject
PM2_HOME='.pm2_1' /usr/local/bin/node /usr/local/lib/node_modules/pm2/bin/pm2 start dist/app.js -- id=1 token=xxx isMaster=true
PM2_HOME='.pm2_2' /usr/local/bin/node /usr/local/lib/node_modules/pm2/bin/pm2 start dist/app.js -- id=1 token=yyy isMaster=false
. . .
PM2_HOME='.pm2_x' /usr/local/bin/node /usr/local/lib/node_modules/pm2/bin/pm2 start dist/app.js -- id=1 token=zzz isMaster=false
当我通过像
bash myscript.sh
这样的 CLI 运行它时它可以工作,但它不能通过 crontab 运行:
@reboot bash /home/user/myproject/myscript.sh
或
* * * * * bash /home/user/myproject/myscript.sh
我也尝试使用
pm2 startup
,但它不适用于PM2_HOME='..'
参数,无论我设置为PM2_HOME
,如.pm2_1,它仍然创建像/home/user/myproject/这样的环境.pm2。似乎 pm2 startup
仅适用于单个实例。
所以我的问题如何通过 crontab 运行 myscript.sh?
我不知道这是否与我的代码是用 TS 编写的相关。在本地主机上我像这样运行它:
npm start -- id=1 token=zzz isMaster=false
在package.json中设置start:
"start": "npm run build && node dist/app"
"build": "rimraf dist && tsc"
要让 PM2 运行节点应用程序的多个实例,您需要使用集群模式。
请参阅此处的文档:https://pm2.keymetrics.io/docs/usage/cluster-mode/
例如,您可以使用此命令启动应用程序的 4 个实例:
pm2 start app.js -i 4