通过SSH重新启动网络


11

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

service network stop
sleep 5
service network start

问题是因为我发出了网络“停止”命令,所以我当前的ssh连接也丢失了。因此,我无法执行后续命令(睡眠5和服务网络启动)。请注意,我无法使用(服务网络重新启动)。

有人对此有解决方法/解决方案吗?


5
您为什么不只使用“重新启动”选项?为什么要分别停下来,然后再开始?
SpacemanSpiff

这是唯一可与现代Debian和Ubuntu版本一起使用的解决方案:serverfault.com/a/731120/10361在过去的两个发行版中,服务方法都变得“有问题”。
索林2015年

Answers:


8

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

screen

(scren shell启动)

service network restart

(SSH会话断开连接,但网络重新启动仍在屏幕会话中进行)

(等待几秒钟)

(重新启动完成后,SSH返回主机)

screen -r

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

恕我直言,远程重新启动网络接口总是很恐怖。如果没有恢复,会发生什么?如果发生故障,主机中是否装有控制台或其他工具?


1
screen在远程计算机上工作时,我始终会进行操作。如果计划外断开连接,可能会挽救生命。在同一会话中同时具有多个活动外壳也很方便。您可能也想看看tmux,我自己没有使用过,但是有些人更喜欢它,screen并且其核心功能提供了相同的好处。
David Spillett

过时的:这不再起作用:Failed to restart network.service: Unit network.service failed to load: No such file or directory.这有效:serverfault.com/a/731120/10361
sorin

@sorin哪个平台?这是假设使用RedHat变体。
Corey S.

systemctl restart networkingtmux在Ubuntu Xenial上的会话中出于某种原因对我不起作用。systemctl restart network甚至在tmux/ screen会话中都在CentOS 7(OpenVZ)上工作。在不失去连接的情况下。
x-yuri

5

可用的确切命令因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关联的守护程序。


2

一种简单的方法是使用and运算符:

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

2
我希望服务网络停止;睡5; 服务网络启动。如果任何命令失败,它将继续执行其余命令。
ghm1014 2011年

@ ghm1014是的,这也是一个很好的替代形式。实际上,这就是我通常使用的方式。
乔丹·琼斯,

1
相比有什么优势service network restart
Caleb

当您执行service network stop此操作时,接口关闭,bash接收SIGHUP,并且没有其他命令被执行。我想念什么吗?
x-yuri

1

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


如果我将其放在脚本中,则会发生这种情况:在服务器A上,ssh server_B为“ execute_script”。但是我是否仍然会丢失从A到B的ssh连接?我希望我仍然可以保留ssh连接...
Carmen

1
如果要停止服务器上的网络接口,则无法保留SSH会话。
Christopher Armstrong,

因此,当我运行该重启脚本时,我的ssh会话将挂起。有没有办法伪造这个?例如。中断当前的ssh会话并重新连接到它?
卡门

1
是的,屏幕,如今天的答案所示。
mfinni 2011年

是的,那行不通。“服务网络重新启动”实际上调用了shell脚本,但是在内部它只是先运行stop然后再启动。停止后,ssh会话将被切断,并且永不启动。屏幕或nohup就是答案。请注意,我已经通过屏幕完成了此操作,它实际上为我保留了现有的ssh会话(只是有点滞后),但是它不会没有屏幕。危险将使罗宾逊:这是一种完全失去对远程系统访问的好方法(如果您断开连接,不进行调试,则只是在进行软管操作)。
杰瑞德(Jared)

1

试试看(如果需要,可以安装cron):

$ at now+5min
at> service network stop
at> sleep 5
at> service network start
at> [control-D]

然后注销,等待6分钟,然后重新登录


1
at调度是不是在cron包上大多数发行版,尝试寻找一种at直接包装。
Caleb

1

这适用于现代的Debian和Ubuntu,而所有其他答案均无效。

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

请记住,恢复界面可能需要一些时间。就我而言,大约有15秒,因为我确实有一个纽带。


0

听起来好像您想要screen还是tmux。这些将使您可以通过断开网络连接来保留会话。它们确实非常有用,我几乎所有的终端会话都是通过屏幕进行的。


0
#!/bin/sh

# CentOS Linux release 7.4.1708 (Core) 

# 1. restart the network service
# 2. take the NIC [ens32] down
# 3. bring the NIC [ens32] up

systemctl restart network \
  && ifdown ens32 \
  && ifup ens32
#!/bin/sh

# Linux far-seer-01 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux

/etc/init.d/networking restart \
    && ifdown eth0 \
    && ifup eth0

例如

[root@localhost tmp]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b3:74:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.224.129/24 brd 192.168.224.255 scope global dynamic ens32
       valid_lft 1796sec preferred_lft 1796sec
    inet6 fe80::f06e:8b57:23fc:b25/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost tmp]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@localhost tmp]# cat net.sh 
#!/bin/sh

# 1. restart the network service
# 2. take the NIC [ens32] down
# 3. bring the NIC [ens32] up

systemctl restart network \
  && ifdown ens32 \
  && ifup ens32
[root@localhost tmp]# sh net.sh 
Device 'ens32' successfully disconnected.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/17)
$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
$ cat net.sh 
#!/bin/sh

# Linux far-seer-01 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux

/etc/init.d/networking restart \
    &&ifdown eth0 \
    && ifup eth0
$ sh net.sh 
[ ok ] Restarting networking (via systemctl): networking.service.
ifdown: interface eth0 not configured
Internet Systems Consortium DHCP Client 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/00:0c:29:8a:67:72
Sending on   LPF/eth0/00:0c:29:8a:67:72
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5
DHCPREQUEST of 192.168.224.128 on eth0 to 255.255.255.255 port 67
DHCPOFFER of 192.168.224.128 from 192.168.224.254
DHCPACK of 192.168.224.128 from 192.168.224.254
bound to 192.168.224.128 -- renewal in 847 seconds.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.