我正在尝试制作一个使用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)来重新加载对配置文件的更改。


请注意,重新配置时,已建立的连接会丢失。

09-10 01:14