インターネットを必要とするソフトウェアを実行しているUbuntuマシンを持っています。ただし、wifiが失敗して(ルーターの再起動など)、network-managerの再起動を手動で実行するか、wifiをオフにしてからオンにするまで、ネットワークが見つからないことがあります。
cronジョブまたは監視対象ジョブを実行して接続を監視し、ネットワークが見つからない場合にnetwork-managerサービスを再起動してその特定のSSIDに接続する方法はありますか?
インターネットを必要とするソフトウェアを実行しているUbuntuマシンを持っています。ただし、wifiが失敗して(ルーターの再起動など)、network-managerの再起動を手動で実行するか、wifiをオフにしてからオンにするまで、ネットワークが見つからないことがあります。
cronジョブまたは監視対象ジョブを実行して接続を監視し、ネットワークが見つからない場合にnetwork-managerサービスを再起動してその特定のSSIDに接続する方法はありますか?
回答:
最近この問題が発生し始めたばかりなので、これは新しいネットワークマネージャーのバグが原因である可能性があります。Ubuntu15.04にアップグレードした後だと思います。
これらの2つのファイルの回避策として、この問題を一時的に解決できたようです。
~/.bin/WiFi-Keep-Connected
。このコンテンツで、:
#!/bin/bash
while true; do
LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
if [ $? -eq 0 ]; then
rfkill block wifi && rfkill unblock wifi
sleep 10
fi
sleep 10
done
~/.config/autostart/KeepWifiConnected.desktop
。
[Desktop Entry]
Type=Application
Exec=/home/"username"/.bin/WiFi-Keep-Connected
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Keep WiFi Connected
Icon=networkmanager
注:Exec=
上記のパスにユーザー名を入力する必要があります。
注:この方法でWi-Fiを再起動するだけでは不十分な場合があります。その場合、ターミナルからこのコマンドを1回または2回入力してNetwork Managerを再起動する必要があります。sudo service network-manager restart
したがって、あるかもしれない、より良い、このような(念のため)上記のスクリプトを修正するためのアイデア:
#!/bin/bash
while true; do
LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
if [ $? -eq 0 ]; then
rfkill block wifi && rfkill unblock wifi
sleep 10
fi
LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
if [ $? -eq 0 ]; then
gksudo service network-manager restart
sleep 10
fi
sleep 10
done
理由はわかりませんが、あなたが言うように、wifiが失敗したときに、network-managerがネットワークを再度検出しないことがあります。
問題は、wifi接続に失敗した後、ネットワークマネージャーがwifiリストを更新しないことです(ネットワークマネージャーが問題のあるネットワークを隠しているようです)。ネットワークマネージャーには再スキャンメニューオプションがありません。ネットワークマネージャーメニューのワイヤレスチェックボックスを無効および有効にしても、新しいwifiスキャンは強制されません(サービスの再起動とは異なります)。
network-managerが私のワイヤレス接続を失い、それが私のwifiを再び見つけられないとき(そして私はwifiが機能していることを知っています)、私はコマンドを実行します:
sudo iwlist wlan0 scan
wlan0インターフェイス(wlan0は私のラップトップのワイヤレスインターフェイスの名前です)でwifiスキャンを実行し、利用可能なワイヤレスネットワークを表示しますが、副作用としてnetwork-managerがリストを自動的に更新し、失われたネットワークを検出します。
この問題が発生した場合は、コマンドを手動で実行することをお勧めします(ネットワークを再接続しても通信の再開は保証されず、一部のプログラムを再起動する必要があります)。
しかし、あなたが言及したように、それをcronすることができ、接続をテストせずにそれを行うことができます(接続されている場合、スキャンプロセスはwifiリストを更新しますが、現在のワイヤレス接続を閉じません)。
必要に応じて、pingまたはiwconfigを使用して接続性をテストできます。接続していない場合は、スキャンを起動します。
何かのようなもの:
#!/bin/bash
if ! ping -c 1 -W 1 your_router_ip &> /dev/null
then
iwlist wlan0 scan
fi
ただし、このスクリプトは、sudoするか、root権限で実行する必要があることに注意してください。タイムアウトが1秒のpingを1つだけ送信します。
問題は、ルーターの接続性の問題が原因で接続が失われることだと思います。ルーター自体に問題がある場合、ネットワークマネージャーを再起動しても解決できませんでした。むしろ、接続が失われたときにSIGSTOPを使用してソフトウェアを実行しているプロセスを一時停止するスクリプトを作成し、ネットワークが利用可能になったときにSIGCONTを使用して続行するために再度トリガーすることができます。そして、スクリプトをcronジョブに追加し、毎分実行するようにスケジュールします。
参考までに:http : //hints.macworld.com/article.php?story=20030915193440334
お役に立てれば。