インターネット接続が失われたときにスクリプトをどのように実行しますか?

インターネット接続が失われたときにスクリプトをどのように実行しますか?

私はwvdialSIMカードモデムと一緒に(PPPダイヤラ)を使用していますが、時々この接続はサーバー側でリセットされます。ifconfiggrepでダウンロードした量のデータを取得し、どこかに保存するスクリプトを実行したいと思います。明らかに、これは接続が生きている間に行われるべきです。そうしないと、接続がwvdial切断されるとすぐに再接続するように構成されているため、数秒後に何も取得できないか、新しい接続の値が取得されません。どんなアイデアがありますか?

編集する:

もちろん、ifconfig1〜2秒ごとに出力を収集できますが、これはひどい解決策であり、考慮する価値さえありません。私が想像できる最高のシナリオは、何らかの形でifconfig「リセットカウント」を示す信号をキャプチャすることです => しばらくの間信号を一時停止します => 私のスクリプトを実行します => 信号のロックを解除します。しかし、ifconfigおそらく特定のインターフェイスが消えたら、以前の結果をファイルにダンプするように自分で設定するなど、私が知らない可能性があります。別のオプションは、他の場所から出力を取得しないことですifconfig。しかし、入力ソースとは何ですかifconfig

答え1

while(1) ループ内で目的の内容を正確に記録し、最後に睡眠呼び出し(または希望の睡眠長)を呼び出す独自のシェルスクリプトを作成できます。このような:

function get_logname
  {
  echo `date +'%F-%H-%M-%S'`.log
  }

function am_online
  {
   ping -c 1 google.com  >/dev/null 2>&1
   echo $?
  }

function update_logfile
  {
  echo "YOUR DATA TO BE LOGGED" >> $1 
  }

  CUR_LOG=`get_logname`
  echo $CUR_LOG
  while [ 1 ]; do
        if [ "`am_online`" -eq 0 ]; then
           update_logfile $CUR_LOG
        else
           echo "we are offline!"
       CUR_LOG=`get_logname`
        fi

        sleep 1
  done

オンラインでは、毎秒ログファイルに書き込まれます(>>新しいデータを追加し、>新しいデータのみを含むようにファイルを再作成します)。オフライン状態では、次のログファイルの新しい名前を選択し続け、何も記録しません。オンラインに戻ると、最後に選択したログファイル名を使用して新しいログファイルのログ記録が開始され、他のログファイルは変更されていません。

これはあなたに役立ちます。オンラインで見つけたすべてのコードと同様に、コードをテストして必要に応じて動作するかどうかを確認するのはあなたの責任です。特に、この場合はログファイルのサイズが急速に増加する可能性があり、頻繁にオフラインになるとログファイルがたくさん積み重ねられることに注意してください。

「my_internet_logging_script.sh」などのファイルに保存し、以下を実行します。

sh my_internet_logging_script.sh

ログファイルを表示する(またはそれに応じてスクリプトを編集する)ディレクトリに表示します。

答え2

最後の質問に答えるには、以下をifconfigお読みください。データ転送用のさまざまなインターフェイスに関する情報は、最初のファイルにあります。/proc/net/dev/proc/net/if_inet6

/procファイルはハードディスクに保存されず、読み取るたびにカーネルによって生成されるため、ファイルへのアクセスは非常に高速な特殊ファイルシステムです。また、コマンドを必要としない他のタスクを実行するため、直接解析は/proc/net/dev解析よりもわずかに高速です。ifconfig

おおよそのアイデアを提供するために、ここに1000回の繰り返しの時間があります。ifconfigまたはcat /proc/net/dev(繰り返しはzshコマンドです):

$ time (repeat 1000 ifconfig > /dev/null)
1.14s user 3.85s system 90% cpu 5.513 total
$ time (repeat 1000 cat /proc/net/dev > /dev/null)
0.57s user 2.44s system 70% cpu 4.282 tota

もちろんまだ分析はさ/proc/net/devれていませんがいいねただし、毎秒出力を解析することを決定すると、少なくとも20〜30%の速度向上が得られます。

関連情報