我正在使用systemd在单板计算机(嵌入式)平台上启动时启动可执行文件。我希望这个应用程序以无头模式运行 - 无需登录 - 用户将通过Web浏览器控制输入。
我正在使用运行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)无法正常启动。
我的问题是如何让以太网在启动时启动,以便Web服务器可以启动并运行?
在此服务的依赖项中,网络在服务启动的其余部分之前显示在树中:
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服务器启动之前启动网络的建议将不胜感激。谢谢!
答案 0 :(得分:1)
我认为你缺少管理网络接口。像NetworkManager
这样的东西。如果您已经在使用systemd,systemd-networkd
可能是您的解决方案。请阅读ArchLinux Wiki中的systemd-networkd以供参考。
答案 1 :(得分:0)
当应用程序处于无头模式时,我必须让以太网连接自动启动。这是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之前启动以太网。