Почему сетевой менеджер не запускается при загрузке?

Я думаю, что это начало происходить пару месяцев назад, когда я обновился с 10.04 до 12.04.

При каждой перезагрузке сетевой менеджер не запускается. Я должен вручную запустить sudo start network-managerи тогда все работает нормально.

Вещи, которые я уже пробовал (перезагрузка после каждой попытки исправить):

  • Убедитесь, что все ссылки /etc/rc*.d/*network-manager существуют так, как они должны.
  • Поскольку в конфигурационном файле выскочки менеджера сети упоминается local-filesystems, и мой fstab имел ссылку на USB HDD, который не подключен, я прокомментировал эту строку из fstab.
  • sudo dpkg-reconfigure network-manager а потом sudo apt-get install --reinstall network-manager
  • Поискал в syslog намеки, ничего не выскакивал.

Я не думаю, что я изменил /etc/init/network-manager.conf, но вот для справки:

# network-manager - network connection manager
#
# The Network Manager daemon manages the system's network connections,
# automatically switching between the best available.

description "network connection manager"

start on (local-filesystems
      and started dbus
      and static-network-up)
stop on stopping dbus

expect fork
respawn

script
    # set $LANG so that messages appearing on the GUI will be translated. See LP: 875017
    if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG LANGUAGE LC_MESSAGES LC_ALL
    fi

    exec NetworkManager
end script

8 ответов

Решение

В разделе "начало с" вы можете узнать, какие события нужно отправить, прежде чем upstart запустит сетевой менеджер.

В этом случае это:

  • местные-файловые системы
  • DBus
  • статическая сеть до

Вероятность того, что первые два уже были выброшены, если вы загрузились на рабочий стол.

Статическая сеть испускается /etc/network/if-up.d/upstart scriptглавное, событие не будет отправлено, если каждый интерфейс не настроен как "автоматический" в /etc/network/interfaces вверх

В моем случае у меня была оставленная запись для eth0 в /etc/network/interfaces который был настроен на использование DHCP, но так как не было Ethernet, подключенного к eth0, DHCP никогда не мог преуспеть.

Вы можете сказать upstart о создании событий и использовать это, чтобы проверить, отсутствует ли событие static-network-up.

  • Перезагрузите компьютер и не запускайте сетевой менеджер
  • man initctl (вам нужно запустить команду emit с помощью sudo, чтобы запустить man initctl сначала проверить команды, размещенные в интернете)
  • sudo initctl emit static-network-up (вам может понадобиться Ctrl+C через некоторое время)
  • initctl status network-manager (чтобы проверить, началось ли это)

Если это решит вашу проблему, проверьте /etc/network/interfacesзакомментируйте все, кроме:

авто ло
iface lo inet loopback

Затем перезагрузитесь и, надеюсь, сетевой менеджер запустится, как и ожидалось.

На моем Arch Linux мне нужно было выполнить следующую команду и теперь NetworkManager запускается автоматически:

systemctl enable NetworkManager

Это позволяет NetworkManager запускаться при запуске. Это то, что я понимаю.

Была такая же проблема, но ни одно из предложенных решений (включая некоторые из других форумов) не помогло.

Во всяком случае, после прочтения ответа Гордона, я просто удалил and static-network-up линия от /etc/init/network-manager.conf, Это сработало.

У меня была та же проблема после переключения моего ThinkPad при повторном использовании старого диска. Он все еще помнил старые MAC-адреса. Мне пришлось удалить их вручную в /etc/udev/rules.d/70-persistent-net.rules, что решило проблему для меня.

От README на /etc/udev/rules.d:

Файлы в этом каталоге читаются udev(7) и используются, когда ядро ​​выполняет события. Демон udev следит за этим каталогом с помощью inotify, чтобы изменения в этих файлах автоматически регистрировались, по этой причине они должны быть файлами, а не символическими ссылками на другое местоположение, как в случае с Debian.

в дальнейшем:

Напишите свои собственные правила в этом каталоге, которые назначают имя, символические ссылки, разрешения и т. Д., Которые вы хотите. Выберите число выше правил, которые вы хотите переопределить, и ваши будут использованы.

поэтому, пожалуйста, не копируйте / вставляйте файлы, как описано в ответе@epek, а просто добавьте туда еще один файл с более высоким целым числом в начале имени файла. Например,

// Ubuntu core:
70-persistent-net.rules
// Custom overrides and/or additions:
80-persistent-net.rules

То же самое здесь, 12.04 - я сделал:

sudo -s
mv /etc/udev/rules.d/70-persistent-net.rules ~/
touch /etc/udev/rules.d/70-persistent-net.rules
reboot

Исправлена!

Вы также можете вручную отредактировать этот файл и исправить MAC-адреса...

Простой обходной путь - отредактировать /etc/rc.local, чтобы загружать NetworkManager при каждой загрузке компьютера. Это на самом деле не решает проблему с корнем, но сделало вещи функциональными и простыми для меня.

Сначала выполните эту команду:

sudo vim /etc/rc.local

Затем содержимое должно выглядеть примерно так:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#Sleeping a little might be necessary to let it catch up the boot. 
#However, for me, this sleep was a useless overhead.
#sleep 3 
service network-manager restart

exit 0

Для ubuntu 14.04 получил домашний хит "автозагрузка приложений", нажмите "добавить имя-сети", "cmd-sudo service network network manager restart commant- - [его работа работает только с действующими сетевыми настройками, такими как ips,dns, шлюз и т. д.]

Другие вопросы по тегам