SSHによるネットワークの再起動


11

サーバーAで、sshを介してサーバーBに次のコマンドを発行します。

service network stop
sleep 5
service network start

問題は、ネットワークを「停止」したため、現在のSSH接続も失われたためです。そのため、後続のコマンドを実行できません(sleep 5とservice network start)。(サービスネットワーク再起動)は使用できませんのでご注意ください。

誰かがこれの回避策/解決策を持っていますか?


5
なぜ「再起動」オプションを使用しないのですか?なぜ個別に停止してから開始するのですか?
SpacemanSpiff

これは、最新のDebianおよびUbuntuバージョンで動作する唯一のソリューションです。serverfault.com / a / 731120/10361サービスアプローチは、過去数年間に両方のディストリビューションで「障害」になりました。
ソリン、2015年

回答:


8

これをインタラクティブに行う場合は、screenセッションを開始してみませんか?次のようになります。

screen

(スクレンシェルが起動します)

service network restart

(SSHセッションは切断されますが、ネットワークの再起動はスクリーンセッションで続行されます)

(数秒待ってください)

(再起動が完了すると、SSHがホストに戻ります)

screen -r

(画面に再接続し、エラーを確認します)

私見、ネットワークインターフェースをリモートで再起動することは常に怖いです。復旧しない場合はどうなりますか?何か悪いことが起こった場合、ホストにコンソールまたは他の手段がありますか?


1
screenリモートマシンで作業するときは、常に操作します。予期しない切断の場合、それは命の恩人になることができます。また、同じセッションでいくつかのアクティブなシェルを使用すると便利です。また、あなたも見てみたいかもしれませんtmuxが、私はそれを自分で使用しませんでしたが、一部の人はそれを好みscreen、そのコア機能は同じ利点を提供します。
David Spillett、2011年

時代遅れ:これはもう機能しません: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 networkingtmuxUbuntu Xenial でのセッション中、何らかの理由で動作しませんでした。systemctl restart networkCentOS 7(OpenVZ)でもtmux/ screenセッションでは動作しませんでした。接続を失うことなく。
x-yuri

5

これを行うために使用できる正確なコマンドは、Linuxディストリビューションによって異なります。かなり標準的なオプションは、ネットワークを再起動するために、将来5秒間ジョブをスケジュールして「アット」することです。もう1つは、nohupコマンドを使用することです。

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

他のディストリビューションには、結果のプログラムをシェルに関連付けられていないデーモンに変えるデーモンコマンドがあります。


2

これを行う非常に簡単な方法は、and演算子を使用することです。

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

2
サービスネットワークの停止を希望します。5睡眠; サービスネットワーク開始。コマンドのいずれかが失敗した場合でも、残りのコマンドが実行されます。
ghm1014

@ ghm1014ええ、それも非常に良い代替形式です。実際、それは私が通常使用するものです。
ジョーダンS.ジョーンズ

1
上の利点は何service network restartですか?
カレブ

実行するとservice network stop、インターフェイスがダウンし、bash受信されSIGHUP、他のコマンドは実行されません。何か不足していますか?
x-yuri

1

それをシェルスクリプトに入れて、SSH経由で実行してみませんか?


スクリプトに入れた場合、これはサーバーAでssh server_B "execute_script"のようになります。しかし、AからBへのssh接続は失われませんか?私はまだssh接続を維持できることを願っています...
Carmen

1
サーバーのネットワークインターフェイスを停止している場合は、SSHセッションを保持できません。
クリストファーアームストロング

そのため、再起動スクリプトを実行している間、sshセッションがハングするように見えます。これを偽造する方法はありますか?例えば。現在のsshセッションを中断して再接続しますか?
カルメン、2011年

1
ええ、今日の回答で述べたように、画面。
mfinni

ええ、それはうまくいきません。「サービスネットワークの再起動」は実際にはシェルスクリプトを呼び出しますが、内部的には停止してから開始するだけです。sshセッションは停止後に切断され、開始は行われません。画面かnohupが答えです。注:私はこれを画面で実行しましたが、実際には既存のsshセッションが保持されました(少しの遅延)が、画面なしではありません。DANGER WILL ROBINSON:これは、リモートシステムへのアクセスを完全に失う良い方法です(接続が失われた場合、デバッグは行われず、ただ接続されているだけです)。
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直接パッケージ。
カレブ

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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.