Запуск systemd .service при загрузке, eth0 не найден

Я использую systemd для запуска исполняемого файла во время загрузки на платформе одноплатного компьютера (встроенной). Я хочу, чтобы это приложение работало в автономном режиме - без входа в систему - и пользователь будет управлять вводом через веб-браузер.

Я использую TS-7800-V2, на котором работает Debian.

Вот мой сервис (webserver.service), настроенный (etc / systemd / system):

[Unit]
Description=Run LWSWS webserver on startup
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=simple
ExecStart=/libwebsockets/build/bin/lwsws

[Install]
WantedBy=multi-user.target

Я включил и запустил службу и проверил статус:

root@ts7800-v2:~# systemctl status webserver.service 
��● webserver.service - Run LWSWS webserver on startup
   Loaded: loaded (/etc/systemd/system/webserver.service; enabled; vendor preset
   Active: active (running) since Mon 2017-12-11 11:23:39 PST; 11min ago
 Main PID: 2408 (lwsws)
   CGroup: /system.slice/webserver.service
       ��└��─2408 /libwebsockets/build/bin/lwsws

Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]:    mounting callback://proto
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]:  Using non-SSL mode
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]: created client ssl context f
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]: Unable to find interface eth
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]: init server failed
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]: Failed to create vhost local
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]: /etc/lwsws/conf.d/test-serve
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: lwsws[2416]: Context creation failed
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: GPS THREAD created successfully
Dec 11 11:23:39 ts7800-v2 lwsws[2408]: MOTOR CONTROL THREAD created successfully

Итак, служба активна и работает, но соединение eth0 не устанавливается, поэтому веб-сервер (веб-сервер libwebsockets LWSWS) не может запуститься должным образом.

У меня вопрос: как запустить Ethernet при загрузке, чтобы веб-сервер мог запускаться и работать?

В зависимостях для этой службы сеть отображается в дереве перед запуском остальной части службы:

root@ts7800-v2:/etc/systemd/system# systemctl list-dependencies webserver.service
��● ��├��─system.slice
��● ��├��─network-online.target
��● ��│ ��└��─networking.service
��● ��└��─sysinit.target
��●   ��├��─dev-hugepages.mount
��●   ��├��─dev-mqueue.mount
��●   ��├��─kmod-static-nodes.service
��●   ��├��─proc-sys-fs-binfmt_misc.automount
��●   ��├��─sys-fs-fuse-connections.mount
��●   ��├��─sys-kernel-config.mount
��●   ��├��─sys-kernel-debug.mount
��●   ��├��─systemd-ask-password-console.path
��●   ��├��─systemd-binfmt.service
��●   ��├��─systemd-hwdb-update.service
��●   ��├��─systemd-journal-flush.service
��●   ��├��─systemd-journald.service
��●   ��├��─systemd-machine-id-commit.service
��●   ��├��─systemd-modules-load.service
��●   ��├��─systemd-random-seed.service
��●   ��├��─systemd-sysctl.service
��●   ��├��─systemd-timesyncd.service
��●   ��├��─systemd-tmpfiles-setup-dev.service

Мы будем признательны за совет о том, как запустить сеть до запуска веб-сервера. Спасибо!


person Gordon    schedule 11.12.2017    source источник
comment
См. superuser.com/questions/502793/   -  person sawdust    schedule 12.12.2017


Ответы (2)


Я думаю, вам не хватает управления сетевым интерфейсом. Что-то вроде NetworkManager. Если вы уже используете systemd, возможно, systemd-networkd - решение для вас. Для справки прочтите systemd-networkd из ArchLinux Wiki.

person Daniofb    schedule 02.01.2018
comment
Это хороший ответ, но я опубликовал свой собственный ответ, чтобы точно решить проблему. Этот ответ определенно раскрывает корень проблемы. Спасибо! - person Gordon; 11.01.2018

Мне пришлось настроить подключение к сети Ethernet для автоматического запуска, когда приложение находится в безголовом режиме. Вот содержимое (cat) файла etc / network / interfaces:

root@ts7800-v2:/etc/network# cat interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

Я добавил строку «auto eth0», и теперь Ethernet запускается до вызова моего webserver.service.

person Gordon    schedule 11.01.2018