SSH経由で再起動せずにネットワークを正常に再起動する方法は?


98

Ubuntu 14.04では、これ以上何もしsudo service networking restartませsudo /etc/init.d/networking restartん。どちらもコード1で終了します。明らかに何かが変更されました(または半分変更されました)が、何が見つかるかわかりません。これは明らかに、リモートネットワークの再構成やAnsibleなどのツールで問題を引き起こします。

$ sudo bash -x /usr/sbin/service networking restart
[sudo] password for wirehive:
++ basename /usr/sbin/service
+ VERSION='service ver. 0.91-ubuntu1'
++ basename /usr/sbin/service
+ USAGE='Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]'
+ SERVICE=
+ ACTION=
+ SERVICEDIR=/etc/init.d
+ OPTIONS=
+ '[' 2 -eq 0 ']'
+ cd /
+ '[' 2 -gt 0 ']'
+ case "${1}" in
+ '[' -z '' -a 2 -eq 1 -a networking = --status-all ']'
+ '[' 2 -eq 2 -a restart = --full-restart ']'
+ '[' -z '' ']'
+ SERVICE=networking
+ shift
+ '[' 1 -gt 0 ']'
+ case "${1}" in
+ '[' -z networking -a 1 -eq 1 -a restart = --status-all ']'
+ '[' 1 -eq 2 -a '' = --full-restart ']'
+ '[' -z networking ']'
+ '[' -z '' ']'
+ ACTION=restart
+ shift
+ '[' 0 -gt 0 ']'
+ '[' -r /etc/init/networking.conf ']'
+ which initctl
+ grep -q upstart
+ initctl version
+ case "${ACTION}" in
+ stop networking
stop: Job failed while stopping
+ :
+ exec start networking
start: Job is already running: networking

Ubuntu 14.04サーバーでネットワークをリモートで再起動する正しい方法は何ですか?


ネットワークを本当に再起動しますか、それともeth0などのインターフェースを再起動しますか?いずれにせよ、おそらくssh接続が切断されます。
chili555 14年

1
両方が有する情報を得る、シェル・スクリプトであるためsudo bash -x /usr/sbin/service networking restart、およびsudo bash -x /etc/init.d/networking restart
waltinator

@terdonは、14.04にタグを付けることを少し馬鹿げています。特に説明では、「現在の」リリースではないようです。とはいえ、この問題は13.10で完全に再現可能です。
SimonJGreen 14年

@ chili555私がやりたいのは、/ etc / network / interfacesの変更を有効にすることです。これらのスクリプトが動作するSSH接続を停止する前に、この再起動後も生き残ります。
SimonJGreen 14年

@waltinator追加情報は、提案に感謝に疑問を追加
SimonJGreen

回答:


121

これが「機能」であることが判明しました。唯一のUbuntu Serverのインターフェイスを再起動するのサポートされている方法がありますsudo ifdown eth0 && sudo ifup eth0

https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/1301015


8
ルートとしてこのコマンドを実行していない場合は、必ず 'sudo ifdown eth0 && sudo ifup eth0'(2番目のsudoに注意)を実行してください
mtpettyp

3
sshを介して接続されている場合、これは問題ありませんか?すなわち、切断前に両方のコマンドが実行されますか?
meawoppl 14

2
私の場合、走るsudo service networking restartことは物事を台無しにしてしまったようです。だから私はsudo ifdown eth0 && sudo ifup eth0二度走らなければならなかった。はい、2回。
偏光

@ExceptionSlayer:いいえ、彼らは私のために働いていませんでした。サーバーの電源を物理的にオフにし、再度オンにする必要がありました(Ubuntu 14.04)。
-Xdg

4
より安全なオプションの;代わりにを使用していないの&&ですか?
アイザック

72

ifdown、ifupは私にとっては機能しませんでした(2番目のコマンドの前のSSH接続タイムアウトの可能性が高い)。うまくいったのは:

sudo service network-manager restart

これは14.04 ubuntu-desktopシステム上にありました。


4
受け入れられた答えは私にとってはうまくいきませんでした。これはやった。(14.04.1の新規インストール)
u2n 14

2
Trusty(Ubuntu 14.04)でこれが機能することを確認できます。
ゲルロス14

3
Ubuntu 14.04でも「ifdown / ifup」の回答は機能しませんでしたが、これは機能しました。
dieuwe

4
受け入れられた回答は、Ubuntu 12.04以前に適用されます。この答えは14.04で受け入れられます。
スイス

4
私の14.04.2では、このサービスは存在しません-sudoサービスnetwork-managerの再起動。
-Xdg

6

変更されたのは、ネットワークを「バウンス」させたくないということです。停止して開始しても動作します。再起動が機能しなくなりました。私はちょうどこの「問題」を「解決」しました。つまり、古い動作を取り戻しました。以前の動作に戻すには:13.10 /etc/init/networking.confファイルを取得し、14.04ファイルを置き換えます。(編集:どれがどれを置き換えるかを明確化)

プロセスは次のようになります。

(Just before this, I configured my /etc/network/interfaces for eth1 on a 192.168.117.x address)

"/etc/network/interfaces" 16L, 413C written  
root@1404-Anode:~# service networking restart  
stop: Job failed while stopping  
start: Job is already running: networking  
root@1404-Anode:~# echo "hmm, wth?"
hmm, wth?
root@1404-Anode:~# ifconfig  
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19  
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0  
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global  
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link  
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:646 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:531 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:58748 (58.7 KB)  TX bytes:75465 (75.4 KB)  
(lo removed here)  
root@1404-Anode:~# cd /etc/init
root@1404-Anode:/etc/init# diff networking.conf.1310 networking.conf.1404  
13c13  
<       and (stopped udevtrigger or container)) or runlevel [2345]  
---  
>     and (stopped udevtrigger or container)) or runlevel [2345] or stopped  networking   >RESULT=failed PROCESS=post-stop EXIT_STATUS=100  
16a17,20  
>     if [ "$UPSTART_EVENTS" = "stopped" ] && [ "$UPSTART_JOB" = "networking" ] && [ "$EXIT_STATUS" = "100" ]; then  
>         exit 0  
>     fi  
>  
21a26,31  
>     if [ -z "$UPSTART_STOP_EVENTS" ]; then  
>        echo "Stopping or restarting the networking job is not supported."  
>         echo "Use ifdown & ifup to reconfigure desired interface."  
>         exit 100  
>     fi  
root@1404-Anode:/etc/init#  

/etc/init.d/networkingスクリプトについても同じことを行います。これは、/ etc / init / networking.confファイルが参照/呼び出しするものです。

root@1404-Anode:/etc/init# cp networking.conf.1310 networking.conf  
root@1404-Anode:/etc/init# cd ../init.d  
root@1404-Anode:/etc/init.d# diff networking.1404 networking.1310  
15d14  
< STATEDIR="$RUN_DIR/state"
21a21,27
> # Make sure that it's clear to the user that they shouldn't use this
> # script under upstart
> if init_is_upstart; then
>       echo "ERROR: Calling a sysvinit script on a system using upstart isn't supported. Please use the 'service' command instead."  
>       exit 1
> fi
>
52,54d57
<       if ! chown root:netdev "$RUN_DIR" ; then
<           log_warning_msg "can't chown $RUN_DIR"
<       fi
160,162d162
<       if init_is_upstart; then
<               exit 1
<       fi
166c166
<       state=$(ifquery --state)
---
>       state=$(cat /run/network/ifstate)
root@1404-Anode:/etc/init.d# cp networking.1310 networking
root@1404-Anode:/etc/init.d# service networking restart
networking stop/waiting
networking start/running
root@1404-Anode:/etc/init.d# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:318654 (318.6 KB)  TX bytes:418804 (418.8 KB)

eth1      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:23
          inet addr:192.168.117.105  Bcast:192.168.117.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed6:a823/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:98 errors:0 dropped:58 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20055 (20.0 KB)  TX bytes:1226 (1.2 KB)
(lo removed)
root@1404-Anode:/etc/init.d# echo "hah, it works! *8^)"
Hah, it works! *8^)
root@1404-Anode:/etc/init.d#

(note: the steps where I scp'd the 1310 versions into the 1404 system are omitted for brevity). 

明らかに防御的な出口をそこに置く理由はありますが、何が起こっているのかを本当に出力することに煩わされません。

試行すると、エントリは/var/log/upstart/networking.logに移動します。

Stopping or restarting the networking job is not supported.  
Use ifdown & ifup to reconfigure desired interface.  

しかし、サービスネットワーキングの再起動を試みると、ダイアログメッセージとして出力される可能性があります。まぁ。それを理解し、古い方法でさえ回避しました。

編集:これにより、/ etc / init / failsafe.confによって制御されるスクリプトの意図しないトリガーが発生し、起動ごとに120秒のタイムアウト遅延が発生するため、実際の設定ミス/ネットワークをマスクする可能性があるため、望ましくないこの遅延の出現が示す問題ですが、すでに常に表示されています。(たとえば、/ etc / fstabにマップされたネットワークファイル共有へのアクセスを許可していた、プラグを抜いたケーブル)

いずれにせよ、これが常にタイムアウトになっている原因を特定し、見つかったら修正を投稿します。


5
コアOSの動作を変更する知恵は議論の余地があります。
-0xF2

再起動の機能を削除したのはなぜですか?私はそれを回復する前にそれを知りたいです。
フリッカーフライ

@ 0xF2-という意味questionableです。
デール・アンダーソン

@DaleAndersonそれも;-)
0xF2

3

kvm-user420の応答を参照して、Ubuntu 14.04のネットワークスクリプトをUbuntu 13.10のネットワークスクリプトに置き換えるスクリプトをセットアップしました。

ここで見つけることができます:https : //github.com/metral/restore_networking

楽しい!


これは私のために働いた。うまくいけば、いつの日かUpstartは消え去ります;
アンドリュー

0

このスクリプトの問題を修正します。「/ etc / network / if-down.d」にこのスクリプトを追加してください

cd /etc/network/if-down.d
vim ifdown

内容:

#!/bin/bash 

for I in /sys/class/net/* 
do
        ifname=$(basename $I) 
        if [ $ifname != "lo" ] ; then 
                ip addr flush $ifname
        fi
done

そして最後に :

chmod +x ifdown

systemctlまたはserviceコマンドを使用して、IPアドレスを変更し、ネットワークサービスを再起動できるようになりました。
:このスクリプトは単純すぎると処理しない VM、タップ、ブリッジ、...のインターフェイスを。実際には、すべてのインターフェースをフラッシュし、lo(loopback)を除外します。

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