我目前正在开发一个嵌入式 Linux 发行版,以便建立并运行网络。我需要它在可用时在 ppp 连接和 wifi 之间切换。我使用 wpa_cli -a(主动模式)执行此操作,如下所示:
#!/bin/sh
IFNAME=$1
CMD=$2
if [ "$CMD" = "CONNECTED" ]; then
SSID=`wpa_cli -i$IFNAME status | grep ^ssid= | cut -f2- -d=`
/usr/bin/poff
fi
if [ "$CMD" = "DISCONNECTED" ]; then
/usr/bin/pon
fi
Pon 和 poff 用于启动和停止 ppp 拨号和路由设置。
我编写了一个简单的 shell 脚本来启动这个程序,以及用于 wlan0 接口的 wpa_supplicant:
#! bin/sh
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
wpa_cli -a/etc/network/networktest.sh -B
/usr/bin/pon
我需要在操作系统启动时启动它,所以我编写了一个服务:
[Unit]
Description=Network setup service
[Service]
ExecStart=/etc/network-setup
Type=oneshot
[Install]
WantedBy=multi-user.target
现在我不想在 wlan0 接口启动并加载之前运行它,因此我创建了一个 udev 规则,在 wlan0 启动时启动该服务:
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan[0]", TAG+="systemd", ENV{SYSTEMD_WANTS}="network-setup.service"
问题是这样的:当服务从启动时启动并且操作系统已经启动时,我遇到了这个问题:
user.warn wpa_supplicant: Libgcrypt warning: missing initialization - please fix the application
该问题仅在从服务启动时出现,但当我手动运行脚本时,它运行正常。那么为什么会出现问题?
答案1
修复了该问题
添加:
退出后继续保留=是
在网络设置服务中