Не удается запустить службу systemd

Я написал следующую службу systemd для входа в беспроводную сеть при загрузке:

[Unit]
Description=Wireless network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i-device
After=sys-subsystem-net-devices-%i-device

[Service]
Type=oneshot
RemainAfterExit=yes

ExecStart=/usr/bin/ip link set dev %i up
ExecStart=/usr/bin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/wpa_supplicant.conf
ExecStart=/usr/bin/dhcpcd %i

ExecStop=/usr/bin/ip link set dev %i down

[Install]
WantedBy=multi-user.target

Затем я enable делаю это, но каждый раз при загрузке компьютера получаю следующую ошибку:

[abc@arch ~]$ systemctl --failed
  UNIT                            LOAD   ACTIVE SUB    DESCRIPTION
● [email protected] loaded failed failed Wireless network connectivity (wlp3s0)

Однако, если я вручную запущу эту службу после загрузки с помощью:

systemctl start network-wireless@xlp3s0

служба запускается, как и ожидалось.

Это содержимое wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
        ssid="TeliaGateway30-91-8F-1C-B2-29"
        #psk="A80871A90A"
        psk=b4d8a1e9ad665eed0178fea6f141134e795e15183a661848b371a41bb73a6844
}

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

РЕДАКТИРОВАТЬ: добавлен вывод ошибки: вот какую ошибку я получаю:

[abc@arch ~]$ journalctl -b -u [email protected]
-- Logs begin at Sat 2015-08-22 12:50:42 CEST, end at Sun 2015-08-23 22:15:26 CEST. --
Aug 23 21:23:36 arch systemd[1]: Starting Wireless network connectivity (wlp3s0)...
Aug 23 21:23:36 arch ip[274]: Cannot find device "wlp3s0"
Aug 23 21:23:36 arch systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE
Aug 23 21:23:36 arch systemd[1]: Failed to start Wireless network connectivity (wlp3s0).
Aug 23 21:23:37 arch systemd[1]: [email protected]: Unit entered failed state.
Aug 23 21:23:37 arch systemd[1]: [email protected]: Failed with result 'exit-code'.
Aug 23 21:25:11 arch systemd[1]: Starting Wireless network connectivity (wlp3s0)...
Aug 23 21:25:11 arch dhcpcd[424]: wlp3s0: waiting for carrier
Aug 23 21:25:16 arch dhcpcd[424]: wlp3s0: carrier acquired
Aug 23 21:25:16 arch dhcpcd[424]: DUID 00:01:00:01:1d:6b:6b:e6:10:0d:7f:b7:30:f3
Aug 23 21:25:16 arch dhcpcd[424]: wlp3s0: IAID c1:c4:73:e0
Aug 23 21:25:16 arch dhcpcd[424]: wlp3s0: soliciting an IPv6 router
Aug 23 21:25:16 arch dhcpcd[424]: wlp3s0: rebinding lease of 192.168.1.85
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: leased 192.168.1.85 for 3600 seconds
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: adding route to 192.168.1.0/24
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: adding default route via 192.168.1.1
Aug 23 21:25:21 arch dhcpcd[424]: forked to background, child pid 477
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: waiting for carrier
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: carrier acquired
Aug 23 21:25:21 arch dhcpcd[424]: DUID 00:01:00:01:1d:6b:6b:e6:10:0d:7f:b7:30:f3
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: IAID c1:c4:73:e0
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: soliciting an IPv6 router
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: rebinding lease of 192.168.1.85
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: leased 192.168.1.85 for 3600 seconds
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: adding route to 192.168.1.0/24
Aug 23 21:25:21 arch dhcpcd[424]: wlp3s0: adding default route via 192.168.1.1
Aug 23 21:25:21 arch dhcpcd[424]: forked to background, child pid 477
Aug 23 21:25:21 arch systemd[1]: Started Wireless network connectivity (wlp3s0).
Aug 23 21:25:28 arch dhcpcd[477]: wlp3s0: no IPv6 Routers available
Aug 23 22:15:09 arch dhcpcd[477]: wlp3s0: carrier lost
Aug 23 22:15:09 arch dhcpcd[477]: wlp3s0: deleting route to 192.168.1.0/24
Aug 23 22:15:09 arch dhcpcd[477]: wlp3s0: deleting default route via 192.168.1.1
Aug 23 22:15:13 arch dhcpcd[477]: wlp3s0: carrier acquired
Aug 23 22:15:14 arch dhcpcd[477]: wlp3s0: IAID c1:c4:73:e0
Aug 23 22:15:14 arch dhcpcd[477]: wlp3s0: soliciting an IPv6 router
Aug 23 22:15:14 arch dhcpcd[477]: wlp3s0: rebinding lease of 192.168.1.85
Aug 23 22:15:19 arch dhcpcd[477]: wlp3s0: leased 192.168.1.85 for 3600 seconds
Aug 23 22:15:19 arch dhcpcd[477]: wlp3s0: adding route to 192.168.1.0/24
Aug 23 22:15:19 arch dhcpcd[477]: wlp3s0: adding default route via 192.168.1.1
Aug 23 22:15:19 arch dhcpcd[477]: wlp3s0: removing route to 192.168.1.0/24
Aug 23 22:15:26 arch dhcpcd[477]: wlp3s0: no IPv6 Routers available

РЕДАКТИРОВАТЬ: я обнаружил одну потенциальную ошибку, кажется, что сетевой интерфейс меняет имя с wlan0 во время загрузки, однако я попытался запустить службу с wlan0, но результат не изменился.


person user3139545    schedule 23.08.2015    source источник
comment
О каких ошибках systemd сообщает для службы?   -  person larsks    schedule 23.08.2015
comment
Как я могу это проверить?   -  person user3139545    schedule 23.08.2015
comment
Попробуйте запустить: systemctl status [email protected] или journalctl -b   -  person rodrigo    schedule 23.08.2015
comment
Или еще лучше, journalctl -b -u [email protected].   -  person larsks    schedule 23.08.2015


Ответы (1)


Причина, по которой служба останавливается при загрузке, заключается в том, что команда ip не может найти интерфейс. Согласно справочной странице для системных служб, которые является достаточной причиной для отказа в обслуживании.

Как вы сами заметили, интерфейс переименовывается или еще не готов при загрузке.

  • Вы можете проверить, нужно ли вам добавить оператор After=
  • Вы можете проверить с помощью команды systemd-analyze правильность порядка загрузки
  • Вы можете разделить сервис и сделать его более надежным. Большинство демонов могут нормально запускаться, даже если интерфейс еще не готов.

Лично я бы сделал dhcpd и wpa_supplicant отдельными службами и использовал правило systemd networkd или правило udev для запуска интерфейса (если это вообще необходимо). В сети есть много примеров юнит-файлов для wpa_supplicant и dhcpd, может быть, посмотрите на них?

person Hiram    schedule 28.09.2015