通过 SSH 重启网络

通过 SSH 重启网络

在服务器A上,我想通过ssh向服务器B发出以下命令。

service network stop
sleep 5
service network start

问题是因为我发出了网络“停止”,然后我当前的 ssh 连接也丢失了。因此我无法执行后续命令(sleep 5 和 service network start)。请注意,我无法使用(service network restart)。

有人可以解决这个问题吗?

答案1

如果你以交互方式执行此操作,为什么不启动screen会话?它看起来像这样:

screen

(屏幕外壳启动)

service network restart

(SSH 会话断开连接,但网络重启在屏幕会话中继续)

(等待几秒钟)

(重启完成后通过 SSH 返回主机)

screen -r

(重新连接到屏幕并检查错误)

恕我直言,远程重启网络接口总是令人害怕。如果它无法恢复,会发生什么?如果发生意外,您是否有控制台或其他方式进入主机?

答案2

执行此操作的具体命令因 Linux 发行版而异。一个相当标准的选项是安排并在未来 5 秒内“执行”作业以重新启动网络。另一个是使用命令nohup

echo "sleep 5; /etc/init.d/networking start" | at now
nohup sh -c 'sleep 5; /etc/init.d/networking start' &

其他发行版有 daemon 命令,可以将生成的程序变成不再与 shell 关联的守护进程。

答案3

一个非常简单的方法是使用 and 运算符:

service network stop && sleep 5 && service network start

答案4

这适用于现代 Debian 和 Ubuntu,而所有其他答案均不起作用。

screen
sudo ifdown --exclude=lo -a && sudo ifup --exclude=lo -a

请记住,恢复界面可能需要一点时间。就我的情况而言,大约需要 15 秒,因为我有一个绑定。

相关内容