我正在尝试制作一个使用hostapd启动/停止访问点的bash脚本。
我们有一个极端的情况,我们想尽快切换到另一个wifi频道,并且hostapd不支持即时交换频道,我们必须:
杀死进程
更改配置文件
再次启动hostapd。
我决定将信号从主应用程序发送到此脚本(USR1和USR2)以执行此操作,但是我没有得到预期的结果。我始终会首先收到第二个信号,所以它不起作用。我试图在代码中添加sleep(1)来完成这项工作,但这不是一个很好的解决方案。
这是我正在使用的c ++行,
killAP();
sleep(1);
generateAP();
这是脚本。
#!/bin/ash
TASKS=''
enqueueLaunch () {
TASKS="$TASKS launch"
}
enqueueKill () {
TASKS="$TASKS kill"
}
launchAP () {
logger -t LAUNCH Launching AP--.
/scripts/launchAP
logger -t LAUNCH DONE
}
killAP () {
logger -t KILL Killing AP
PID=`cat /var/run/wifi-phy0.pid`
kill -9 $PID
iw wlan0 del
rm -f /var/run/wifi-phy0.pid
logger -t KILL DONE
}
parse () {
for i in $@ ; do
case "$i" in
"launch")
launchAP
;;
"kill")
killAP
;;
esac
done
}
echo $$ > /var/run/hostapd-sh.pid
trap enqueueLaunch SIGUSR1
trap enqueueKill SIGUSR2
while :
do
if [ ! -z "$TASKS" ] ; then
parse $TASKS
TASKS=""
fi
sleep 1
done
任何想法都欢迎。
非常感谢!!
最佳答案
虽然保证按发送顺序发送实时信号,但未指定标准信号的发送顺序。尝试切换到实时信号。
另外,您可能希望完全尝试其他方法。作为其man page specifies,您可以直接要求它重新加载其配置文件,而不是先杀死然后重新启动hostapd:
可以通过将SIGHUP发送到hostapd处理器或使用hostapd_cli(8)实用程序(使用hostapd_cli reconfigure
)来重新加载对配置文件的更改。
请注意,重新配置时,已建立的连接会丢失。