私は3つの主要なサイトにpingを送って接続を切断し、3つのサイトがすべて失敗した場合は再接続し、ネットワークが機能していることを定期的に確認するスクリプトを作成しました。 Xセッションがなくても、コマンドラインでスクリプトが正常に動作します。スクリプトは次のとおりです。
#!/bin/bash
/usr/bin/notify-send -i 'dialog-information' 'Running CheckNetUp.sh' 'Checking whether network is up'
AtLeastOneSiteFound=false;
# Try to download three sites and indicate a site was found if they work
# as long as we can grab at least one site, we're good.
# Otherwise, we'll disconnect and reconnect.
/usr/bin/wget --spider --read-timeout=15 http://google.ca
if [ "$?" = 0 ]; then
AtLeastOneSiteFound=true;
fi
/usr/bin/wget --spider --read-timeout=15 http://facebook.com
if [ "$?" = 0 ]; then
AtLeastOneSiteFound=true;
fi
/usr/bin/wget --spider --read-timeout=15 http://wikipedia.org
if [ "$?" = 0 ]; then
AtLeastOneSiteFound=true;
fi
if [ "$AtLeastOneSiteFound" = false ]; then
# Disconnect my wifi (and, consequently, VPN)
/usr/bin/nmcli dev disconnect wlp0s20u2
# Bring my wifi up
/usr/bin/nmcli con up uuid e23f4af0-7411-4f4e-8d3c-a7cd35b607e1
# Bring my VPN up
/usr/bin/nmcli con up uuid 6b0f8740-df8e-411e-adeb-bcf70ced772f
fi
問題は、スクリプトがWi-Fiを起動しようとすると、次のエラーメッセージでcronで失敗することです。
Error: Connection activation failed: Not authorized to control networking.
オンラインでできるだけ多くの解決策を見つけましたが、まだ成功していません。最も有望なのは、すべてのユーザーがテキスト設定でパスワードを使用してWi-FiおよびVPN接続システムに接続/アクセスできるようにすることですが、これは何も変更しません。
編集:スクリプトはcrontabと手動で実行されたときに両方のユーザーとして実行されます。
答え1
Wi-Fi?
「メインサイト」の代わりに自分のルーターをpingでき、ISPのドメインサーバーやルーターの代わりに接続が常にユーザー側のどこかで切断される可能性が低くなります。実際、スクリプトアプローチは素晴らしいでしょう。ますます多くの間隔でLAN側をピングし、接続が切断されるまでにどれくらいの時間がかかっているかを確認します。 LANが確実であると思うよりも長い間動作している場合にのみ、WAN側にpingを送信することを検討してください。ただし、特定のインターネットDNSサーバー(管理者は同意しない可能性があります)ではなく、ホスト名をIPアドレスに置き換えて、多数のインターネットルーター(大丈夫)を繰り返しpingすることをお勧めします。
インターネット接続が切断され続けるという事実は、スクリプト、つまり制限されたリソースにアクセスする方法に関連していますか?その後、BIOSに電源管理があり(これが現在のカーネルにどのような影響を与えるかわかりません)、最後にあなたの質問に対するISPの答えがあります。繰り返しますが、目を覚ます夢でもインターネット接続の問題を示すためにWi-Fiを使用することを検討していません。
銅または光ファイバーを介して接続します。投稿を繰り返します。