1、问题:/bin/sh: node: command not found
[root@prod01002 ~]# salt 'uat01007' cmd.run "node -v"
uat01007:
/bin/sh: node: command not found
ERROR: Minions returned with non-zero exit code
[root@uat01007 ~]# node -v
v8.12.0
[root@uat01007 ~]# whereis node
node: /usr/local/node-v8.12.0-linux-x64/bin/node
解决办法:
[root@uat01007 ~]# ln -s /usr/local/node-v8.12.0-linux-x64/bin/node /usr/bin/node
[root@uat01007 ~]# ln -s /usr/local/node-v8.12.0-linux-x64/bin/npm /usr/bin/npm
[root@uat01007 ~]# ln -s /usr/local/node-v8.12.0-linux-x64/bin/pm2 /usr/bin/pm2
[root@prod01002 ~]# salt 'uat01007' cmd.run "node -v"
uat01007:
v8.12.0
2、问题:saltstack 可以远程执行 pm2 status,但看不到运行的进程
[root@prod01002 ~]# salt 'uat01007' cmd.run "pm2 status"
uat01007:
[PM2][Initialization] Environment variable HOME (Linux) or HOMEPATH (Windows) are not set!
[PM2][Initialization] Defaulting to /etc/.pm2
┌──────────┬────┬─────────┬──────┬─────┬────────┬─────────┬────────┬─────┬─────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
└──────────┴────┴─────────┴──────┴─────┴────────┴─────────┴────────┴─────┴─────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app
[root@uat01007 qadist]# pm2 status
┌──────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ app │ 0 │ 2.0.0 │ fork │ 15233 │ online │ 0 │ 93m │ 0% │ 70.4 MB │ root │ disabled │
└──────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app
[root@uat01007 qadist]# ps -ef|grep pm2
root 15223 1 0 14:39 ? 00:00:02 PM2 v3.2.2: God Daemon (/root/.pm2)
root 17659 1 0 15:24 ? 00:00:00 PM2 v3.2.2: God Daemon (/etc/.pm2)
root 19961 1 0 16:06 ? 00:00:00 PM2 v3.2.2: God Daemon (/etc/.pm2)
root 20390 20010 0 16:13 pts/0 00:00:00 grep --color=auto pm2
排查过程:
[root@uat01007 qadist]# PM2_HOME=/etc/.pm2 pm2 status
┌──────────┬────┬─────────┬──────┬─────┬────────┬─────────┬────────┬─────┬─────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
└──────────┴────┴─────────┴──────┴─────┴────────┴─────────┴────────┴─────┴─────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app
[root@uat01007 qadist]# PM2_HOME=/root/.pm2 pm2 status
┌──────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼───────────┼──────┼──────────┤
│ app │ 0 │ 2.0.0 │ fork │ 20794 │ online │ 0 │ 11m │ 0.1% │ 44.9 MB │ root │ disabled │
└──────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴───────────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app
不同的PM2_HOME下看到的进程不一样,直接在 linux 命令行下启动的进程的在 /root/.pm2 下的,saltstack 启动的进程是在 /etc/.pm2 下的
解决办法:让进程都运行在 /etc/.pm2
// 添加 PM2_HOME 环境变量,指向 /etc/.pm2/
[root@uat01007 qadist]# cat /etc/profile.d/nodejs.sh
export NODEJS_HOME=/usr/local/node-v8.12.0-linux-x64
export PATH=$PATH:$NODEJS_HOME/bin
export PM2_HOME=/etc/.pm2/
[root@uat01007 qadist]# source /etc/profile
// 重新启动应用
[root@uat01007 qadist]# PM2_HOME=/root/.pm2/ pm2 del all && pkill PM2 && pm2 start app.js
[PM2] Applying action deleteProcessId on app [all](ids: 0)
[PM2] [app](0) ✓
┌──────────┬────┬─────────┬──────┬─────┬────────┬─────────┬────────┬─────┬─────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
└──────────┴────┴─────────┴──────┴─────┴────────┴─────────┴────────┴─────┴─────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app
[PM2] Spawning PM2 daemon with pm2_home=/etc/.pm2/
[PM2] PM2 Successfully daemonized
[PM2] Starting /data/apps/zbcf-h5-pc/qadist/app.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ app │ 0 │ 2.0.0 │ fork │ 11460 │ online │ 0 │ 0s │ 0% │ 11.4 MB │ root │ disabled │
└──────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app
[root@uat01007 qadist]# pm2 status
┌──────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬───────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼───────┼───────────┼──────┼──────────┤
│ app │ 0 │ 2.0.0 │ fork │ 11460 │ online │ 0 │ 5s │ 12.9% │ 60.9 MB │ root │ disabled │
└──────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴───────┴───────────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app
[root@uat01007 qadist]# ps -ef|grep pm2
root 11450 1 3 17:41 ? 00:00:00 PM2 v3.2.2: God Daemon (/etc/.pm2/)
root 11479 11242 0 17:41 pts/0 00:00:00 grep --color=auto pm2
// 远程执行可以看到运行的进程了
[root@prod01002 zbcf-salt]# salt 'uat01007' cmd.run 'pm2 status'
uat01007:
[PM2][Initialization] Environment variable HOME (Linux) or HOMEPATH (Windows) are not set!
[PM2][Initialization] Defaulting to /etc/.pm2
┌──────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ app │ 0 │ 2.0.0 │ fork │ 22792 │ online │ 0 │ 14m │ 0% │ 45.1 MB │ root │ disabled │
└──────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show ` to get more details about an app