SaltStack 远程执行 Nodejs 问题

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

你可能感兴趣的:(SaltStack 远程执行 Nodejs 问题)