博客主頁(yè):https://tomcat.blog.csdn.net
博主昵稱:農(nóng)民工老王
主要領(lǐng)域:Java、Linux、K8S
期待大家的關(guān)注??點(diǎn)贊??收藏?留言??
故障詳情
最近收到測(cè)試同事的反饋,在通過ssh遠(yuǎn)程執(zhí)行命令是遇到“未找到命令”的報(bào)錯(cuò)。如下圖所示:單獨(dú)遠(yuǎn)程執(zhí)行l(wèi)sof命令也報(bào)錯(cuò)。
但遠(yuǎn)程服務(wù)器的lsof命令是正常的,直接在遠(yuǎn)程服務(wù)器中運(yùn)行第一張圖片中的命令也沒有任何報(bào)錯(cuò)。
問題原因
造成這個(gè)問題是因?yàn)閎ash有四種模式,分別是 interactive + login shell 、 interactive + non-login shell、 non-interactive + login shell、 non-interactive + non-login shell。而通過ssh遠(yuǎn)程執(zhí)行命令時(shí),采用的是non-interactive + non-login shell模式。這種情況下,bash無交互未登錄,執(zhí)行命令時(shí)不會(huì)調(diào)用/etc/profile
,而是只會(huì)執(zhí)行用戶家目錄下的.bashrc,也就是~/.bashrc
。而PATH信息一般存儲(chǔ)在/etc/profile。只加載~/.bashrc
就會(huì)缺失PATH變量的設(shè)置。
解決方案
根據(jù)問題產(chǎn)生原因,有以下兩種解決方案:
命令使用全路徑
通過全路徑方式調(diào)用可以避開PATH找不到的問題。
如果不知道目標(biāo)命令的絕對(duì)路徑,可以通過whereis
查看,如whereis lsof
。
如果報(bào)錯(cuò)來自腳本中的命令,就需要修改腳本文件。所以這種方法有一些局限性。
修改~/.bashrc
既然~/.bashrc
缺少PATH信息,那我們?cè)谠撐募行略鯬ATH信息就解決問題了。
在遠(yuǎn)程服務(wù)器上運(yùn)行echo -e "\nexport PATH=$PATH" >> .bashrc
可將PATH信息寫入~/.bashrc
。文章來源:http://www.zghlxwxcb.cn/news/detail-531571.html
如需轉(zhuǎn)載,請(qǐng)注明本文的出處:農(nóng)民工老王的CSDN博客https://blog.csdn.net/monarch91 。文章來源地址http://www.zghlxwxcb.cn/news/detail-531571.html
到了這里,關(guān)于故障排查:通過ssh遠(yuǎn)程執(zhí)行命令時(shí)報(bào)錯(cuò)未找到命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!