Bir ağ SSH üzerinden yeniden başlatılmadan başarıyla nasıl başlatılır?


98

Ubuntu 14.04 yılında ne sudo service networking restartde sudo /etc/init.d/networking restartartık hiçbir şey yapmak. Ayrıca her ikisi de kod 1 ile çıkar. Bir şey açık bir şekilde değişti (ya da yarı değişti) ama ne olduğunu bulamıyorum. Bu açık bir şekilde uzaktan ağ yapılandırması ve Ansible gibi araçlarla ilgili sorunlara neden olur.

$ 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

Uzaktan Ubuntu 14.04 Sunucusu'nda ağı yeniden başlatmanın doğru yolu nedir?


Gerçekten ağı yeniden başlatmak mı yoksa sadece eth0 gibi bir arayüzü yeniden başlatmak mı istiyorsun? Her durumda, muhtemelen ssh bağlantısını kesecektir.
chili555

1
Her iki kabuk komut olduğundan, bilgiyi kazandırmak sudo bash -x /usr/sbin/service networking restartvesudo bash -x /etc/init.d/networking restart
waltinator

@ terdon biraz aptalca 14.04 civarında bir etiket için sonra açıklama, özellikle dediği gibi "geçerli" bir sürüm olduğunu söylüyor. Bu sorunun 13.10'da tamamen tekrarlanabileceğini söyledi.
SimonJGreen

@ chili555 Gerçekleşmek istediğim şey / etc / network / interfaces'teki değişikliklerin etkili olması için. Bu komut dosyalarından önce, çalışmayı durduran SSH bağlantılarını bu yeniden başlatmadan çıkar.
SimonJGreen

@waltinator soruya ek bilgi eklendi, öneri için teşekkürler
SimonJGreen

Yanıtlar:


121

Bunun bir "özellik" olduğu ortaya çıktı. Sadece Ubuntu Sunucu olduğu bir arayüz yeniden başlatmadan desteklenen yolusudo ifdown eth0 && sudo ifup eth0

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


8
Bu komutu root olarak çalıştırmıyorsanız 'sudo ifdown eth0 && sudo ifup eth0' (ikinci sudo notunu) çalıştırdığınızdan emin olun
mtpettyp

3
Eğer ssh ile bağlanmışsa bu uygun mu? Yani, her iki komutun bağlantısı kesilmeden önce çalışır mı?
meawoppl

2
Benim durumumda koşmak sudo service networking restartişleri mahvetmiş gibiydi. Bu yüzden sudo ifdown eth0 && sudo ifup eth0iki kez koşmak zorunda kaldım . Evet iki kez.
kutuplaşmak

@ExceptionSlayer: Hayır, benim için işe yaramadı. Sunucuyu fiziksel olarak kapatıp tekrar açmak zorunda kaldım (Ubuntu 14.04).
Xdg

4
Daha güvenli bir seçenek ;yerine kullanmıyor &&musunuz?
Isaac

72

ifdown, ifup benim için işe yaramadı (muhtemelen ikinci komuttan önce SSH bağlantısı zaman aşımına uğradı). İş neydi:

sudo service network-manager restart

Bu 14.04 ubuntu-masaüstü sistemdeydi.


4
Kabul edilen cevap benim için işe yaramadı; bu yaptı. (14.04.1 'in yeni kurulumu)
u2n

2
Bunun benim için Trusty'de çalıştığını onaylayabilir (Ubuntu 14.04).
gerlos

3
"İfdown / ifup" yanıtı benim için Ubuntu 14.04'te de işe yaramadı ama bu oldu.
dieuwe,

4
Kabul edilen cevap Ubuntu 12.04 ve daha düşük sürümleri için geçerlidir. Bu cevap 14.04 için kabul edilebilir.
İsviçre'de

4
Benim 14.04.2 tarihinde bu hizmet mevcut değil - sudo servis ağ yöneticisi yeniden başlatılıyor.
Xdg

6

Değişen şey şu ki, artık ağı zıplamanı istemiyorlar. durmak ve başlamak hala işe yarıyor. yeniden başlatma artık çalışmıyor. Ben sadece "bu" sorunu "çözdüm, yani eski davranışımı geri aldım. Önceki davranışa dönmek için: 13.10 / etc / init/networking.conf dosyasını alın ve 14.04 dosyasını onunla değiştirin. (düzenleme: hangisinin yerine geçtiği netleştirilir)

İşlem şöyle gözüküyor:

(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 betiği için de aynısını yapın, /etc/init/networking.conf dosyası başvuruda bulunur / çağrılar.

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). 

Açıkçası, oraya savunma amaçlı bir çıkış yapmaları için bir neden var, ancak neler olup bittiğini iyi bir şekilde ortaya çıkarmak için zahmet etmiyorlar.

Bir giriş, denediğiniz zaman /var/log/upstart/networking.log dosyasına girer, şöyle görünür:

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

Ancak, servis ağı yeniden başlatmayı denediğinizde iletişim mesajı olarak bunu gerçekten alabilirler / olması gerekirdi. ah iyi. Anladım ve hatta eski bir çalışma.

EDIT: Bunun, /etc/init/failsafe.conf tarafından kontrol edilen ve her açılışta 120 saniyelik bir zaman aşımı gecikmesine neden olabileceği için istenmeyen bir tetiklemeye neden olduğunu buldum, belki de gerçek yanlış yapılandırmaları / ağları maskelemek bu gecikmenin görünüşünün göstereceği sorunlar, ancak zaten her zaman gösteriyor. (örneğin, / etc / fstab ile eşlenen ağ paylaşımına erişim sağlayan fişli bir kablo)

Her durumda, buna neyin sebep olduğunu her zaman zaman aşımına uğratan anlayacağım ve bulduğumda bir düzeltme göndereceğim.


5
Bir çekirdek işletim sistemi davranışını değiştirme bilgisi tartışmalıdır.
0xF2

Neden yeniden başlatma özelliğini kaldırdılar? Tekrar takmadan önce bunu bilmek istiyorum.
flickerfly

@ 0xF2 - demek istiyorsun questionable.
Dale Anderson,

@DaleAnderson da ;-)
0xF2


0

Bu komut dosyasındaki sorunu düzeltiyorum: Lütfen bu komut dosyasını "/etc/network/if-down.d" dizinine ekleyin

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

içerik:

#!/bin/bash 

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

ve sonunda :

chmod +x ifdown

Şimdi ip adresini değiştirebilir ve systemctl veya service komutuyla ağ servisini yeniden başlatabilirsiniz.
NOT : Bu komut çok basit ve KOLU YAPMAYIN ... arayüzleri vm dokunun, köprü,. aslında tüm arayüzleri yıkamak lo (geridöngü) hariç tutar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.