Neustart des Netzwerks über SSH

10

Auf Server A möchte ich die folgenden Befehle über ssh an Server B senden.

service network stop
sleep 5
service network start

Das Problem ist, dass ich einen Netzwerkstopp ausgegeben habe und dann auch meine aktuelle SSH-Verbindung unterbrochen wird. Daher kann ich die nachfolgenden Befehle nicht ausführen (Sleep 5 und Start des Servicenetzwerks). Beachten Sie, dass ich nicht verwenden kann (Neustart des Servicenetzwerks).

Hat jemand eine Problemumgehung / Lösung dafür?

Carmen
quelle
5
Warum würden Sie nicht einfach die Option "Neustart" verwenden? Warum separat anhalten und dann starten?
SpacemanSpiff
Dies ist die einzige Lösung, die mit modernen Debian- und Ubuntu-Versionen funktioniert : serverfault.com/a/731120/10361 Der Service-Ansatz wurde in beiden Distributionen in den letzten Jahren "fehlerhaft".
Sorin

Antworten:

8

Wenn Sie dies interaktiv tun, warum nicht eine screenSitzung starten ? Es würde ungefähr so ​​aussehen:

screen

(Scren Shell startet)

service network restart

(Die SSH-Sitzung wird getrennt, aber der Neustart des Netzwerks wird in der Bildschirmsitzung fortgesetzt.)

(Warten Sie einige Sekunden)

(SSH zurück in den Host, sobald der Neustart abgeschlossen ist)

screen -r

(Zum Bildschirm erneut anschließen und auf Fehler prüfen)

IMHO ist es immer beängstigend, eine Netzwerkschnittstelle remote neu zu starten. Was passiert, wenn es nicht wieder auftaucht? Haben Sie eine Konsole oder andere Mittel im Host, wenn etwas Schlimmes passiert?

Corey S.
quelle
1
Ich screenarbeite immer durch, wenn ich an entfernten Maschinen arbeite. Bei ungeplanten Unterbrechungen kann dies lebensrettend sein. Es kann auch praktisch sein, mehrere aktive Shells in derselben Sitzung zu haben. Vielleicht tmuxmöchten Sie es sich auch ansehen , ich habe es nicht selbst verwendet, aber einige bevorzugen es screenund seine Kernfunktion bietet die gleichen Vorteile.
David Spillett
Veraltet: das funktioniert nicht mehr: Failed to restart network.service: Unit network.service failed to load: No such file or directory.Das funktioniert: serverfault.com/a/731120/10361
sorin
@sorin Welche Plattform? Dies ging von einer RedHat-Variante aus.
Corey S.
systemctl restart networkinghat aus irgendeinem Grund in einer tmuxSitzung unter Ubuntu Xenial nicht für mich funktioniert . systemctl restart networkarbeitete unter CentOS 7 (OpenVZ) nicht einmal in tmux/ screensession. Ohne die Verbindung zu verlieren.
X-Yuri
5

Die genauen verfügbaren Befehle variieren je nach Linux-Distribution. Eine Option, die ziemlich Standard ist, besteht darin, einen Job für 5 Sekunden in der Zukunft zu planen und zu "at", um das Netzwerk neu zu starten. Eine andere Möglichkeit besteht darin, den nohupBefehl zu verwenden.

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

Andere Distributionen haben den Befehl daemon, um das resultierende Programm in einen Daemon umzuwandeln, der der Shell nicht mehr zugeordnet ist.

Seth Robertson
quelle
2

Eine sehr einfache Möglichkeit, dies zu tun, ist die Verwendung des Operators und:

service network stop && sleep 5 && service network start
Jordan S. Jones
quelle
2
Ich würde es vorziehen, das Netzwerk zu stoppen. Schlaf 5; Service-Netzwerk starten. Wenn einer der Befehle fehlschlägt, wird der Rest trotzdem ausgeführt.
ghm1014
@ ghm1014 Ja, das ist auch eine sehr gute alternative Form. Genau das benutze ich normalerweise.
Jordan S. Jones
1
Was ist der Vorteil gegenüber service network restart?
Caleb
Wenn Sie dies tun, wird service network stopdie Schnittstelle ausgefallen, bashempfangen SIGHUPund es werden keine anderen Befehle ausgeführt. Vermisse ich etwas
X-Yuri
1

Warum nicht in ein Shell-Skript einfügen und das über SSH ausführen?

Christopher Armstrong
quelle
Wenn ich es in ein Skript einfüge, passiert Folgendes: Auf Server A ssh server_B "execute_script". Aber werde ich nicht trotzdem meine SSH-Verbindung von A nach B verlieren? Ich hoffe, dass ich die SSH-Verbindung noch aufrechterhalten kann ...
Carmen
1
Sie können die SSH-Sitzung nicht beibehalten, wenn Sie die Netzwerkschnittstelle auf einem Server stoppen.
Christopher Armstrong
Es sieht also so aus, als würde meine SSH-Sitzung hängen bleiben, während ich das Neustart-Skript ausführe. Gibt es eine Möglichkeit, dies vorzutäuschen? Z.B. Aus der aktuellen SSH-Sitzung ausbrechen und erneut eine Verbindung herstellen?
Carmen
1
Ja, Bildschirm, wie aus der heutigen Antwort hervorgeht.
Mfinni
Ja, das wird nicht funktionieren. Der "Neustart des Servicenetzwerks" ruft tatsächlich ein Shell-Skript auf, aber intern wird nur "Stop" und dann "Start" ausgeführt. Die SSH-Sitzung wird nach dem Stopp unterbrochen und der Start erfolgt nie. Bildschirm oder Nohup ist die Antwort. Beachten Sie, dass ich dies über den Bildschirm getan habe und die vorhandene SSH-Sitzung für mich tatsächlich beibehalten wurde (nur ein wenig Verzögerung), aber nicht ohne Bildschirm. GEFAHR WIRD ROBINSON: Dies ist eine gute Möglichkeit, den Zugriff auf das Remote-System vollständig zu verlieren (wenn Sie die Verbindung verlieren, kein Debuggen, werden Sie nur abgespritzt).
Jared
1

Versuchen Sie Folgendes (installieren Sie bei Bedarf möglicherweise cron):

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

Dann abmelden, 6 Minuten warten und sich erneut anmelden

RainerFromReading
quelle
1
Der atScheduler befindet sich in den meisten Distributionen nicht im Cron-Paket. Suchen Sie atdirekt nach einem Paket.
Caleb
1

Dies funktioniert mit modernem Debian und Ubuntu, während alle anderen Antworten nicht funktionieren.

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

Bitte beachten Sie, dass es einige Zeit dauern kann, bis die Benutzeroberfläche wieder verfügbar ist. In meinem Fall ca. 15 Sekunden, da ich eine Bindung habe.

Sorin
quelle
0

Es hört sich so an, als ob Sie entweder Bildschirm oder tmux wollen . Auf diese Weise können Sie Ihre Sitzung durch den Verlust einer Netzwerkverbindung beibehalten. Sie sind wirklich sehr nützlich, fast alle meine Terminalsitzungen finden über den Bildschirm statt.

Jeff Tang
quelle
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

z.B

[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.
ROY
quelle