通过 SSH 重启网络

Car*_*men 13 networking linux ssh

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

service network stop
sleep 5
service network start
Run Code Online (Sandbox Code Playgroud)

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

有没有人有解决方法/解决方案?

Cor*_* S. 9

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

screen
Run Code Online (Sandbox Code Playgroud)

(屏幕外壳启动)

service network restart
Run Code Online (Sandbox Code Playgroud)

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

(等待几秒钟)

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

screen -r
Run Code Online (Sandbox Code Playgroud)

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

恕我直言,远程重启网络接口总是很可怕。当它不回来时会发生什么?如果发生不好的事情,您是否有控制台或其他方式进入主机?


Set*_*son 5

可用于执行此操作的确切命令因 Linux 发行版而异。一个非常标准的选项是在未来安排和“在”工作 5 秒以重新启动网络。另一种是使用nohup命令。

echo "sleep 5; /etc/init.d/networking start" | at now
nohup sh -c 'sleep 5; /etc/init.d/networking start' &
Run Code Online (Sandbox Code Playgroud)

其他发行版具有 daemon 命令,可将生成的程序转换为不再与 shell 关联的守护程序。


Chr*_*ong 1

为什么不将其放入 shell 脚本中并通过 SSH 执行呢?

  • 如果您要停止服务器上的网络接口,则无法保留 SSH 会话。 (2认同)