Bootstrap

ansible踩坑——环境变量问题

问题现象

使用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启动加载环境变量的不同
;