博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注💖点赞👍收藏⭐留言💬
故障详情
最近收到测试同事的反馈,在通过ssh远程执行命令是遇到“未找到命令”的报错。如下图所示:
单独远程执行lsof命令也报错。
但远程服务器的lsof命令是正常的,直接在远程服务器中运行第一张图片中的命令也没有任何报错。
问题原因
造成这个问题是因为bash有四种模式,分别是 interactive + login shell 、 interactive + non-login shell、 non-interactive + login shell、 non-interactive + non-login shell。而通过ssh远程执行命令时,采用的是non-interactive + non-login shell模式。这种情况下,bash无交互未登录,执行命令时不会调用/etc/profile
,而是只会执行用户家目录下的.bashrc,也就是~/.bashrc
。而PATH信息一般存储在/etc/profile。只加载~/.bashrc
就会缺失PATH变量的设置。
解决方案
根据问题产生原因,有以下两种解决方案:
命令使用全路径
通过全路径方式调用可以避开PATH找不到的问题。
如果不知道目标命令的绝对路径,可以通过whereis
查看,如whereis lsof
。
如果报错来自脚本中的命令,就需要修改脚本文件。所以这种方法有一些局限性。
修改~/.bashrc
既然~/.bashrc
缺少PATH信息,那我们在该文件中新增PATH信息就解决问题了。
在远程服务器上运行echo -e "\nexport PATH=$PATH" >> .bashrc
可将PATH信息写入~/.bashrc
。
文章来源:https://www.toymoban.com/news/detail-531571.html
如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。文章来源地址https://www.toymoban.com/news/detail-531571.html
到了这里,关于故障排查:通过ssh远程执行命令时报错未找到命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!