2016-05-26 6 views
0

私はTcpdumpを実行して60秒ごとに新しいファイルを生成しています。同時に私はTcpdumpによって生成されたファイルを処理するためのbashスクリプトを実行していますが、動作する前にファイルの書き込み完了を確認する必要があります。 私は "fuser"を使用していますが、常に古いファイルとtcpdumpによって書き込まれている新しいファイルと一緒に1を返していることがわかります。誰もが、私はそれが動作前のファイル書き込み完了のBashチェック

#!/bin/bash 

FULLPATH=$1 
echo $FULLPATH 

for file in $FULLPATH/*.pcap 
    do 
     echo "file name: $file" 

     fuser $file 
     result=$? 
     echo $result 

     if [ $result = 0 ]; then 
      echo "There are no processes accessing file: $file"  
      sudo /usr/src/nDPI/example/ndpiReader -i $file 
      echo "end: $file" 
      #rm-f $file 

     else 

      echo "file $file is in use." 
     fi 

    done 
+0

を文書化されていない、あなたはそのが更新されたときに表示するファイルの更新時刻を確認すると考えていますか? –

答えて

1

コンサルティングfuserのマニュアルが指定したファイルのどれもがアクセスしていないかの場合にされている場合

定着がゼロ以外の戻りコードを返すことを明らかに解決する方法を教えてもらえます致命的なエラー

だから、ゼロ以外のコードは、おそらくいいです取得していますが、使用されているファイルから致命的なエラーを区別するために、あまりにも出力をチェックすることをお勧めします:

ouput=$(fuser $file) 
return_code=$? 

if [ "$return_code" -ne 0 ]; then 
    if [ -n "$output"]; then 
    echo "The file is being used" 
    else 
    echo "A fatal error occured !" 
    fi 
else 
    echo "The file is not being used" 
fi 

致命的なエラーを気にしない場合(結局のところ、ファイルを読み込もうとしないでください)、戻りコードがゼロでないことを確認するだけで十分です。

  • リターン0を、ファイルがアクセスされていない場合は、ファイルが他のこれらの
  • リターン何かのリストを他のプロセスによってアクセスされ、出力されている場合:fuserは意志、それをまとめると言い換えする

    、または致命的なエラーが

    • を発生した場合、ファイルがアクセスされていない場合、コードはおそらく1になりますが、これは
    • を文書化されていないコードは、おそらく何か他トンになります漢0または1で致命的なエラーが発生した場合、当該時間率は60秒であるので、しかし、これは
+0

Thxこのコードは致命的なエラーをチェックするのに役立ちます。しかし、私の問題は、新しいプロセスを開始するために、新しいファイル(tcpdumpによる)を書くのを待つべきだということです。 – Sana

+0

確かに、戻りコードがゼロでないことを確認してください。致命的なエラーの場合には当てはまらないはずの1であることを確認する方が良いかもしれませんし、出力を確認することもできます。私は本当に私の答えでそれをすべて説明した、私はあなたがファイルが現在アクセスされているかどうかを確認するのに役立つ方法が表示されない場合は、再度読むことをお勧めします。 – Aaron

+0

@Sana「fuser」の行動を要約するために私の答えを編集しました。 – Aaron

関連する問題