SSH 断开后,宝塔和 Redis 命令都不能用了?

SSH 断开后,bt、redis-cli 和 PHP 目录检查突然报错?记录 Windows Git Bash 与远程 Ubuntu 服务器的区别,以及如何确认命令究竟在哪台机器上运行。

刚才还能用的命令,重新输入却提示 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 上。

相同的报错,原因可能不同。

我现在会按这个顺序看:

  1. SSH 是否已经断开?
  2. 当前提示符属于本地电脑,还是远程服务器?
  3. 确认在服务器后,软件是否安装、命令路径是否正确?

这篇记录的,只是其中最容易忽略的一种情况。

八、自己维护 VPS,有时卡住的不是复杂问题

这次配置网站,PHP 扩展、Nginx 和 Redis 都花了不少时间。但也有几次,问题只是 SSH 断开后,我还在原来的窗口继续输入命令。

没有看提示符,就以为服务器上的东西突然没了。

以后再遇到“刚才能用,现在找不到”,我会先看自己到底在操作哪台电脑。

对刚开始自己维护 VPS 的人来说,这一步很小,但确实能少走一些弯路。

相关阅读

确认已经重新登录服务器后,可以继续看我实际处理的两次问题:Redis 安装后,服务启动与 WordPress 对象缓存接入的排查,以及升级 PHP 后出现 502,如何从日志找到套接字权限问题。这两篇记录的是服务器内部的问题,与本文输错命令位置的情况不同。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注