1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ansible远程执行shell报错:command not found

ansible远程执行shell报错:command not found

时间:2022-12-30 21:36:42

相关推荐

ansible远程执行shell报错:command not found

背景

项目中使用到了pm2,用于管理微服务的启停,我在相关机器上安装好了pm2,然后使用ansible进行批量启动服务。在使用ansible的shell模块执行远程命令时候却报了错:/bin/sh: pm2 :command not found,如下图

问题定位

1. 在被执行机器上查看pm2命令,看看是不是没有添加到环境变量(PATH)里。

登陆到这台机器上,执行:which pm2

可以看到pm2已安装到机器上了。

再看看是否已添加到环境变量中。

如下图,我已经把pm2的路径添加到环境变量~/.bash_profile,是不是有可能ansible的shell模块执行时候没有读取到环境变量?

2. 尝试在ansible的shell的执行参数加上. ~/.bash_profile,保证执行命令前先读取到环境变量。

执行成功!看来ansible在执行shell命令的时候,没有正确加载到~/.bash_profile。

那到底为什么没法正确加载到~/.bash_profile呢?

原因

我在网上搜索了一下~/.bash_profile,发现linux里面有多个读取环境变量的配置文件,并且有加载顺序和不同的场景。

首先介绍两个概念:login shell和non-shell shell,顾名思义,一个是交互式的shell,一个是非交互式的shell。

login shell:通常指的是常规登录到某shell环境后,能够在当前命令行中输入shell命令这种情况。

non-login shell:不用登陆的,比如ssh远程执行,是非交互式的。

如下是login shell和non-login shell的环境变量文件的加载顺序。

由图片我们可知,ansible这种非交互式的shell执行应该读取的是~/.bashrc,而我这里配置到了~/.bash_profile

解决方案

1. 将~/.bash_profile中ansible所需要的环境变量配置到~/.bashrc中

2. 在使用pm2的时候加上pm2的绝对路径

3. 在执行pm2的时候,在前面加上. ~/.bash_profile

比较推荐的是第一种方式,这样ansible后续有其他的环境变量也可以预先配置到~/.bashrc,减小我们改造或者书写ansible命令的成本。

备注:图片引用博客地址:/gatieme/article/details/45064705

传送门:最新测试资料与大厂招聘合集

博主:测试生财(一个不为996而996的测开码农)

座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。

内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。

csdn:/ccgshigao

博客园:/qa-freeroad/

51cto:/14900374

微信公众号:测试生财(定期分享独家内容和资源)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。