刚才还能用的命令,重新输入却提示 command not found,不一定是服务器出了问题。
我维护 WordPress 网站时,就反复碰到过这种情况。
上一刻还在检查宝塔、PHP 和 Redis,SSH 一断开,再输入同样的命令,突然都找不到了。
后来才看明白:连接断开后,终端已经回到了 Windows 电脑,后面的命令没有发到服务器上。
一、窗口没关,但已经不是在操作服务器
我用的是 Windows 上的 Git Bash,通过 SSH 连接 InterServer VPS。
连接服务器时,输入:
ssh root@162.35.107.221
登录成功后,终端前面显示:
root@vps3574328:~#
这时输入的命令,才是在远程服务器上运行。
但连接有时会断开,终端显示:
Connection to 162.35.107.221 closed by remote host.
Connection to 162.35.107.221 closed.
随后提示符变成:
Administrator@DESKTOP-O1PA1DU MINGW64 ~
$
窗口还是同一个窗口,看起来只是多了几行字,但操作位置已经变了。
前面是 Ubuntu 服务器,后面是我自己的 Windows 电脑。
二、bt: command not found:宝塔命令为什么找不到?
当时为了打开宝塔面板,我在终端输入:
bt default
结果返回:
bash: bt: command not found
如果只看最后一行,很容易以为宝塔没装好,或者命令丢了。
但往上看,SSH 已经断开,当前提示符是:
Administrator@DESKTOP-O1PA1DU MINGW64 ~
$
我的 Windows 电脑没有安装服务器上的宝塔,当然找不到 bt。
这条报错只能说明当前环境找不到命令,不能直接证明远程服务器上的宝塔出了故障。
三、redis-cli: command not found:先确认是否仍在服务器上
后来检查 PHP 目录时,我又在 SSH 断开后输入:
ls /www/server/php
返回:
ls: cannot access '/www/server/php':
No such file or directory
但重新登录服务器,执行同样的命令,就能看到当时安装的 PHP 版本目录。
配置 Redis 时也是一样。
我在本地输入:
redis-cli INFO keyspace
返回:
bash: redis-cli: command not found
重新通过 SSH 登录服务器后,再运行,就有输出了。
这些命令本身没有因为断线突然失效。只是我已经换了运行环境,自己却没注意。
四、看懂提示符,比反复重输命令有用
这次之后,我会先看终端最前面那一段。
| 终端显示 | 我当时所处的位置 |
|---|---|
root@vps3574328:~# |
已登录 Ubuntu VPS |
Administrator@DESKTOP-O1PA1DU MINGW64 ~ |
Windows 本地 Git Bash |
Connection to ... closed |
这次 SSH 连接已经结束 |
这些用户名和机器名,是我自己电脑和服务器上的显示,别人的不一定一样。
重点是分清楚:现在登录的是哪台机器。
终端窗口一直开着,不代表 SSH 一直连着;上一次登录成功,也不代表后面每一条命令都还在服务器上执行。
五、断开后,我怎么继续操作?
看到连接关闭,我会先重新连接:
ssh root@162.35.107.221
这里是我服务器的地址,操作自己的 VPS 时要换成自己的登录用户和 IP。
按提示完成登录,看到远程服务器的提示符,再继续执行检查命令。
如果还是不确定当前环境,可以查看:
hostname
以及:
uname -s
我这台 VPS 运行的是 Ubuntu,系统检查应当对应 Linux 环境。Windows Git Bash 的结果则会体现它自己的运行环境。
先确认位置,再继续操作,比一看到找不到命令就重新安装软件省事。
六、SSH 断开,不等于网站也停了
第一次看到连接被远程关闭,我会担心:是不是服务器也出问题了?
但在我这次维护过程中,重新登录后检查,PHP-FPM 等服务仍然在运行。
SSH 是我连接服务器进行操作的通道。这条连接结束,不能单凭这一点就判断网站服务也停止了。
同样,也不能反过来认定所有操作都已经完成。
如果断线前正在安装或编译软件,重新登录后,还是要检查实际结果。我安装 EXIF 扩展时,就在断线后重新确认了扩展文件是否存在、PHP-FPM 是否运行,再继续配置。
终端断开前最后显示了什么,和服务器最终完成了什么,最好分开确认。
七、如果确认在服务器上,命令还是找不到呢?
那就需要继续查,不能把所有 command not found 都归到 SSH 断线上。
比如我刚开始检查 Redis 时,确实是在服务器里,但 Redis 当时还没有安装;而另一次报错,则是因为命令输在了 Windows 上。
相同的报错,原因可能不同。
我现在会按这个顺序看:
- SSH 是否已经断开?
- 当前提示符属于本地电脑,还是远程服务器?
- 确认在服务器后,软件是否安装、命令路径是否正确?
这篇记录的,只是其中最容易忽略的一种情况。
八、自己维护 VPS,有时卡住的不是复杂问题
这次配置网站,PHP 扩展、Nginx 和 Redis 都花了不少时间。但也有几次,问题只是 SSH 断开后,我还在原来的窗口继续输入命令。
没有看提示符,就以为服务器上的东西突然没了。
以后再遇到“刚才能用,现在找不到”,我会先看自己到底在操作哪台电脑。
对刚开始自己维护 VPS 的人来说,这一步很小,但确实能少走一些弯路。
相关阅读
确认已经重新登录服务器后,可以继续看我实际处理的两次问题:Redis 安装后,服务启动与 WordPress 对象缓存接入的排查,以及升级 PHP 后出现 502,如何从日志找到套接字权限问题。这两篇记录的是服务器内部的问题,与本文输错命令位置的情况不同。