Debian systemd network-online.target не работает?

Это может быть связано - или нет. С нескольких месяцев составить ключ прекращает работать, через некоторое время. Я определил.Xmodmap, который определяет ключи, и после выполнения xmodmap это работает, по крайней мере, для окончания документа или около этого. Но после нескольких часов (?) это просто исчезает.

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

24
04.09.2019, 02:23
5 ответов

Поскольку вы используете / etc / network / interfaces , вам понадобится сервис systemd для мониторинга состояния каждого интерфейса. Проверьте, есть ли у вас /lib/systemd/system/ifup-wait-all-auto.service (установлен пакетом ifupdown в Ubuntu 15.04). Если нет, то создайте /etc/systemd/system/ifup-wait-all-auto.service и вставьте следующее:

[Unit]
Description=Wait for all "auto" /etc/network/interfaces to be up for network-online.target
Documentation=man:interfaces(5) man:ifup(8)
DefaultDependencies=no
After=local-fs.target
Before=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutStartSec=2min
ExecStart=/bin/sh -ec '\
  for i in $(ifquery --list --exclude lo --allow auto); do INTERFACES="$INTERFACES$i "; done; \
  [ -n "$INTERFACES" ] || exit 0; \
  while ! ifquery --state $INTERFACES >/dev/null; do sleep 1; done; \
  for i in $INTERFACES; do while [ -e /run/network/ifup-$i.pid ]; do sleep 0.2; done; done'

[Install]
WantedBy=network-online.target

Это служебный файл, присутствующий в системе Ubuntu 15.04, но с добавлением раздела [Install] , чтобы упростить задачу. Я надеюсь, что поведение ifup в Ubuntu 15.04 будет таким же, как поведение ifup в Debian Jessie. В противном случае потребуются некоторые изменения (особенно в последней строке).

Затем запустите sudo systemctl enable ifup-wait-all-auto.service . После перезагрузки компьютера вы должны увидеть, что network-online.target достигается после того, как интерфейсы активированы (по крайней мере).

18
27.01.2020, 19:41

Внимание! Только что выяснил это на Raspbian Jessie: удалите ВСЕ закомментированные строки в /etc/network interfaces и все заработает! Похоже, это ошибка парсинга =) В моем конкретном случае я оставил закомментированным iface eth0 inet dhcp и просто забыл об этом много лет назад, но после обновления до Raspbian Jessie и восстановления ядра я получил очень странное поведение: он использовал DHCP и отказывался делать настройку из /etc/network/interfaces. Поэтому я удалил все комментарии - только рабочие строки, перезагрузился - и все работает! НИКАКИХ ИСПРАВЛЕНИЙ/РЕДАКТИРОВАНИЯ СКРИПТОВ НЕ ТРЕБУЕТСЯ!

0
27.01.2020, 19:41

Согласноhttps://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/рекомендуемый способ запуска службы ПОСЛЕ сетевого уровня — использовать « network -online.target » в.serviceфайл:

 "After=network-online.target"
 "Wants=network-online.target"

Однако после использования « network -online.target » и сбоя моей службы из-за неполного уровня сети я обнаружил ошибку (https://github.com/coreos/bugs/issues/1966), связанную с ней :, которая не гарантируется. 100% непогрешимость.

Действительно, когда используются инструменты динамической настройки сети, такие как « NetworkManager », как в этом случае, состояние сети никогда не может быть на 100% точным или предсказуемым. Как видно из ссылки, описывающей ошибку, « network -online.target » может вести себя непоследовательно в зависимости от различных приложений, с которыми он используется.

Обходной путь:
Вам необходимо проанализировать порядок запуска -служб и использовать тот, который запускается позже, чем "network -online.target":

 systemd-analyze plot > /home/pi/graph.svg

Это итеративный процесс, постепенно меняющий цели на более поздние службы, пока не будет найден тот, который обеспечивает уровень сети и запуск службы без ошибок. В моем собственном случае мне даже пришлось поместить sleep 10в свой сценарий, вызванный службой SystemD.

0
27.01.2020, 19:41

Однажды я нашел ответ на Github , который решил проблему, постоянно пытаясь пропинговать сервер. Только когда проходит пинг, служба продолжается:

[Service]
ExecStartPre=/bin/sh -c 'until ping -c1 google.com; do sleep 1; done;'
ExecStart=<your command>

Я заменил google.comсвоим собственным сервером, потому что моему основному скрипту нужно было подключиться к моему серверу.

3
27.01.2020, 19:41

Эта ошибка появилась 7 лет назад и была исправлена ​​два года назад. Эти строки были добавлены вNetworkManager.service

# We want to enable NetworkManager-wait-online.service whenever this service
# is enabled. NetworkManager-wait-online.service has
# WantedBy=network-online.target, so enabling it only has an effect if
# network-online.target itself is enabled or pulled in by some other unit.
Also=NetworkManager-wait-online.service

Если вы пришли сюда, значит, вы, вероятно, используете более старую ОС и должны вручную включить NetworkManager-wait-online.service.

Выполнитьsystemctl enable NetworkManager-wait-online.service

0
22.06.2020, 04:56

Теги

Похожие вопросы