问题现象
使用ansible启动远程服务器的node服务,环境变量未被加载
本地测试打印环境变量为空
定位原因
1、环境变量问题
首先ansible使用的是ssh的方式下发命令,为no login shell的方式登陆
在ubuntu
的配置文件~/.bashrc
中有以下注释
第一行表明~/.bashrc这个文件会被no login shell加载
第二个位置表明如果不是交互式运行则直接退出了,因此环境变量要写在这个return之前
ansible命令格式
可以看到使用双引号""
和单引号''
的结果不同,单引号能取得值
查看PS1,单引号的双引号的结果也不相同
环境变量PATH
ubuntu
安装了pm2之后,ansible无法远程使用,并且远程执行ansible $IP -m shell -a "$PATH"
能取到node的路径
解决方案:将node的路径写到/etc/enviroment
遗留问题:
- 1、在ansible中为什么有的命令使用单引号和双引号都能获取值,而又的命令只能使用单引号
- 2、ubuntu和centos启动加载环境变量的不同