Mulai ulang Jaringan melalui SSH

11

Di server A, saya ingin mengeluarkan perintah berikut ke Server B melalui ssh.

service network stop
sleep 5
service network start

Masalahnya adalah karena saya mengeluarkan jaringan 'berhenti', maka koneksi ssh saya saat ini terputus juga. Karena itu saya tidak dapat menjalankan perintah berikutnya (sleep 5 dan service network start). Perhatikan bahwa saya tidak dapat menggunakan (service network restart).

Adakah yang punya solusi untuk ini?

Carmen
sumber
5
mengapa Anda tidak menggunakan opsi "restart" saja? mengapa secara terpisah berhenti, dan kemudian mulai?
SpacemanSpiff
Ini adalah satu-satunya solusi yang berfungsi dengan versi Debian dan Ubuntu modern: serverfault.com/a/731120/10361 pendekatan layanan menjadi "salah" di kedua distro dalam beberapa tahun terakhir.
Sorin

Jawaban:

8

Jika Anda melakukan ini secara interaktif, mengapa tidak memulai screensesi? Akan terlihat seperti ini:

screen

(scren shell dimulai)

service network restart

(Sesi SSH terputus, tetapi jaringan restart di sesi layar)

(Tunggu beberapa detik)

(SSH kembali ke host setelah restart selesai)

screen -r

(Sambungkan kembali ke layar dan periksa kesalahan)

IMHO, selalu menakutkan untuk memulai kembali antarmuka jaringan dari jarak jauh. Apa yang terjadi ketika itu tidak muncul kembali? Apakah Anda memiliki konsol atau cara lain untuk menjadi tuan rumah jika sesuatu yang buruk terjadi?

Corey S.
sumber
1
Saya selalu beroperasi screensaat bekerja pada mesin jarak jauh. Dalam kasus pemutusan yang tidak terencana itu bisa menjadi penyelamat. Juga memiliki beberapa cangkang aktif di sesi yang sama bisa berguna. Anda mungkin juga ingin melihatnya tmuxjuga, saya belum menggunakannya sendiri tetapi beberapa orang lebih menyukainya screendan fungsi intinya memberikan manfaat yang sama.
David Spillett
Kedaluwarsa: ini tidak berfungsi lagi: Failed to restart network.service: Unit network.service failed to load: No such file or directory.Ini berfungsi: serverfault.com/a/731120/10361
sorin
@ Atau di platform mana? Ini dengan asumsi varian RedHat.
Corey S.
systemctl restart networkingtidak bekerja untuk saya karena suatu alasan dalam tmuxsesi di Ubuntu Xenial. systemctl restart networkbekerja pada CentOS 7 (OpenVZ) bahkan tidak dalam tmux/ screensesi. Tanpa kehilangan koneksi.
x-yuri
5

Perintah persis yang tersedia untuk melakukan ini bervariasi berdasarkan distribusi Linux. Pada opsi yang cukup standar adalah untuk menjadwalkan dan "di" pekerjaan selama 5 detik di masa depan untuk memulai kembali jaringan. Satu lagi adalah menggunakan nohupperintah.

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

Distribusi lain memiliki perintah daemon untuk mengubah program yang dihasilkan menjadi daemon yang tidak lagi terkait dengan shell.

Seth Robertson
sumber
2

Cara yang sangat sederhana untuk melakukan ini adalah dengan menggunakan operator dan:

service network stop && sleep 5 && service network start
Jordan S. Jones
sumber
2
Saya lebih suka berhenti jaringan layanan; tidur 5; jaringan layanan mulai. Jika salah satu dari perintah gagal, akan tetap menjalankan sisanya.
ghm1014
@ ghm1014 Aye, itu juga bentuk alternatif yang sangat bagus. Bahkan, itulah yang biasanya saya gunakan.
Jordan S. Jones
1
Apa kelebihannya service network restart?
Caleb
Ketika Anda melakukan service network stopantarmuka turun, bashmenerima SIGHUP, dan tidak ada perintah lain yang dijalankan. Apakah saya melewatkan sesuatu?
x-yuri
1

Mengapa tidak memasukkannya ke dalam skrip shell dan menjalankannya melalui SSH?

Christopher Armstrong
sumber
Jika saya memasukkannya ke dalam skrip, maka ini akan terjadi: pada Server A, ssh server_B "execute_script". Tapi apakah saya masih kehilangan koneksi ssh dari A ke B? Saya berharap bahwa saya masih dapat mempertahankan koneksi ssh ...
Carmen
1
Anda tidak dapat mempertahankan sesi SSH jika Anda menghentikan antarmuka jaringan di server.
Christopher Armstrong
jadi, itu akan terlihat seperti sesi ssh saya akan hang ketika saya menjalankan skrip restart. Apakah ada cara untuk memalsukan ini? Misalnya. keluar dari sesi ssh saat ini dan sambung kembali ke sana?
Carmen
1
Ya, layar, sebagaimana dicatat oleh jawaban hari ini.
mfinni
Ya, itu tidak akan berhasil. "Layanan jaringan restart" sebenarnya memanggil skrip shell, tetapi secara internal itu hanya berjalan berhenti kemudian mulai. Ssh sesi akan terputus setelah berhenti dan awal tidak pernah terjadi. Layar atau nohup adalah jawabannya. Catatan, saya telah melakukan ini melalui layar dan itu benar-benar mempertahankan sesi ssh yang ada untuk saya (hanya sedikit keterlambatan), tetapi tidak akan tanpa layar. BAHAYA AKAN ROBINSON: ini adalah cara yang baik untuk kehilangan akses ke sistem jarak jauh sepenuhnya (jika Anda kehilangan koneksi, tidak ada debugging, Anda hanya disemprot).
Jared
1

Coba ini (mungkin menginstal cron jika diperlukan):

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

Kemudian logout, tunggu 6 menit dan login kembali

RainerFromReading
sumber
1
The atscheduler tidak dalam paket cron pada kebanyakan distro, mencoba mencari atpaket langsung.
Caleb
1

Ini berfungsi dengan Debian dan Ubuntu modern, sementara semua jawaban lainnya tidak akan berfungsi.

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

Harap diingat bahwa perlu sedikit waktu untuk mendapatkan antarmuka kembali. Dalam kasus saya sekitar ~ 15 detik karena saya memiliki ikatan.

Sorin
sumber
0

Sepertinya Anda ingin layar atau tmux . Ini akan memungkinkan Anda untuk mempertahankan sesi Anda melalui hilangnya koneksi jaringan. Mereka benar-benar sangat berguna, hampir semua sesi terminal saya melalui layar.

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

misalnya

[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
sumber