在服务器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 秒,因为我有一个绑定。