现场环境:
salt-minion端:
ip:10.0.3.149 环境:使用 nvm装的nodejs 受用nodejs自带的npm 安装pm2
sal-master端:
IP:10.0.3.145 环境安装salt-master
问题描述:
在master端使用命令执行:
salt "10.0.3.149" cmd.run "pm2 list" 提示pm2命令未找到,但是在salt-minon端执行pm2是正常的,现场截图如下:
问题分析:
既然提示命令未找到,但是salt-minion是正常的那么说明这个安装没问题的。
是不是有可能是其服务的用户的原因?起的不是root用户?
检查:执行命令:salt "10.0.3.149" cmd.run "whoami" ,显示就是root用户
既然用户是正确的,那就很有可能是环境变量的问题,检查环境变量:
salt-master. 执行 salt "10.0.3.149" cmd.run "echo $PATH" 输出一下
salt-minon端:执行echo $PATH
发现不同了吧,果然是环境变量的原因。那么,问题又来了,既然都是root用户为啥环境还能不一样呢?
上网查找,看到这么一篇文章,这哥们的情况和我的挺像,查考他的文章坐下设置:https://www.90hsa.com/223.html
分析:
在salt-minon的启动脚本中,根据上面的那篇文章,看到了这个调用
进入这个被调用的文件中,看到这个了这个:
再看上面的调用方法,就会发现,当用这个启动脚本的时候就是调用这个文件,调用的同时会继承这个文件中的环境变量,但是这个里面没有node和pm2的环境变量
所有就会出现pm2命令找不到的提示
解决方法:
方法一:
.使用上面那篇文章里面的方法:
salt 10.0.3.149 cmd.run 'echo $PATH' shell='/bin/bash' runas='root'
salt 10.0.3.149 cmd.run 'pm2 list' shell='/bin/bash' runas='root'
方法二:
在functions 添加环境变量到PATH中
重启客户端就可以了,若是出现使用node其服务的是时候报错/etc/pm2的话,在
/root/.bash_profile 中添加:export HOME=/root
就好了
如果有其他好的方法请指教!!!!!!