发生‘CTRL-EVENT-SSID-TEMP-DISABLED’事件时,WLAN会禁用多长时间?

发生‘CTRL-EVENT-SSID-TEMP-DISABLED’事件时,WLAN会禁用多长时间?

每隔一段时间,我的路由器就会出现故障(有时是由于固件更新),在此期间,有时我的 Raspberry Pi 也会重新启动,我会在日志中看到如下内容:

Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: Trying to associate with 80:3f:5d:99:b7:63 (SSID='X' freq=2462 MHz)
Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: CTRL-EVENT-ASSOC-REJECT status_code=16
Jul 25 10:00:49 raspberrypi wpa_supplicant[536]: wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="X" auth_failures=1 duration=10 reason=CONN_FAILED

这没问题,因为当时 WiFi 不可用,但 WiFi 几分钟后就会恢复。目前,我能找到的唯一“修复”方法是重新启动 Pi。

但是,如果我不在家,我希望它能再试一次。我把它放了 3 个小时,它从来没有重新尝试过,所以我想知道它还会再试一次吗?有什么办法可以让它处理这种情况吗?

答案1

在 RaspberryPi 上自动重新连接 WiFi

在这篇文章中,我将介绍如何编写一个简短的脚本,该脚本会自动将 RaspberryPi 重新连接到 WiFi 网络。该脚本将检查 Pi 是否具有网络连接,如果处于离线状态,则将重新启动无线接口以使其重新上线。我们将使用它cron来定期安排此脚本的执行。

有几种方法可以确定 RaspberryPi 是否具有网络连接。对于此脚本,我们将使用ping

编写脚本

首先,我们需要确定 RaspberryPi 是否已连接到网络。为此,我们将尝试 ping 服务器并查看是否收到响应。如果命令成功(RaspberryPi 收到来自服务器的响应),则表示网络连接正常。如果命令失败,我们将关闭wlan0并重新打开。

#!/bin/bash

# The IP for the server you wish to ping (8.8.8.8 is a public Google DNS server)
SERVER=8.8.8.8

# Only send two pings, sending output to /dev/null
ping -c2 ${SERVER} > /dev/null

# If the return code from ping ($?) is not 0 (meaning there was an error)
if [ $? != 0 ]
then
    # Restart the wireless interface
    ifdown --force wlan0
    ifup wlan0
fi

将脚本命名为容易记住的名称 ( wifi_rebooter.sh),并将此脚本放在 中/usr/local/bin。通过运行以下命令确保其可执行:

chmod +x /usr/local/bin/wifi_rebooter.sh

安排定期执行

为了确保脚本自动运行,我们将使用cron。运行此脚本的频率取决于个人喜好 - 我选择每五分钟运行一次脚本。

要安排脚本,请打开/etc/crontab进行编辑并将此行添加到底部:

*/5 *   * * *   root    /usr/local/bin/wifi_rebooter.sh

这将确保脚本以 root 身份每 5 分钟运行一次。如果您不熟悉 cron 语法,请查看cron 格式

测试

为了测试脚本是否按预期工作,我们将关闭界面wlan0并等待脚本将其恢复。在关闭之前wlan0,您可能需要将间隔调整 /etc/crontab1分钟。另外,请注意,这将立即断开您与 shell 会话的连接。

为了wlan0确认脚本有效,请运行:

ifdown --force wlan0

耐心等待约 1 分钟后,尝试通过 SSH 重新连接到 RaspberryPi。假设一切正常,RaspberryPi 应该会自动重新连接到 WiFi。etc/crontab如果您将间隔设置为 1 分钟进行测试,请不要忘记将间隔调整回更合适的值。

来源

相关内容