【问题标题】:Starting systemd .service at boot, eth0 not found在启动时启动 systemd .service,找不到 eth0
【发布时间】:2017-12-11 20:50:52
【问题描述】:

我正在使用 systemd 在单板计算机(嵌入式)平台上启动一个可执行文件。我希望这个应用程序以无头模式运行 - 无需登录 - 用户将通过网络浏览器控制输入。

我使用的是运行 Debian 的 TS-7800-V2。

这是我的服务 (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 连接,因此 Web 服务器(libwebsockets Web 服务器 LWSWS)无法正常启动。

我的问题是如何让以太网在启动时启动,以便网络服务器可以启动和运行?

在此服务的依赖项中,网络在服务启动的其余部分之前显示在树中:

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

我们将不胜感激有关如何在 Web 服务器启动之前启动网络的建议。谢谢!

【问题讨论】:

标签: service embedded-linux ethernet systemd systemctl


【解决方案1】:

我认为您缺少对网络接口的管理。像NetworkManager 这样的东西。如果您已经在使用 systemd,那么 systemd-networkd 可能是您的解决方案。请阅读 ArchLinux Wiki 中的 systemd-networkd 以供参考。

【讨论】:

  • 这是一个很好的答案,但我发布了自己的答案来准确解决这个问题。这个答案肯定能找到问题的根源。谢谢!
【解决方案2】:

当应用程序处于无头模式时,我必须让以太网连接自动启动。这是 etc/network/interfaces 文件的内容(cat):

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”行,现在以太网在我的 webserver.service 被调用之前启动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2013-01-11
    • 2017-08-11
    • 1970-01-01
    相关资源
    最近更新 更多