1

バックグラウンドで実行しています(SSH) tail -f access_log | grep 'POST /index.php' > test &

andが保存されている/var/log/httpd場所でこのコマンドを実行しました。access_logerror_log

ls -lファイルのサイズが変更されたかどうかを確認し続けていtestますが、作成されています..そして常に0バイトです。

適切なコマンドを使用していますtailか? 私がしたいことをするために?

POST /index.php を別のファイルに保存するだけで、不要な access_log 情報を除外できるようにしたいと考えています。

私はそれを繰り返している間でも access_log が自分自身を変更し続けることを知っていますが、上から下に開始することが可能であれば ( head? 私は推測します)、それはより良いでしょう.

4

3 に答える 3

1

tail -f継続的な出力がある> testため、ファイルが作成されない場合があります。

Ahmed Masud's answer の提案はおそらくこれよりも優れているので、最初に試してみてください。しかし、それがうまくいかない場合は、これを 1 分に 1 回、または 1 時間に 1 回など、心配する必要がなければ何でも実行できます。それについて非常に効率的です:

grep 'POST /index.php' access_log > test

testこれにより、ファイルを段階的にビルドするのではなく、実行するたびにファイルが完全に再作成されます。しかし、大まかなツールが必要な場合は、それで十分です。

この方法でログ ファイルがローテーションされるとtest、新しいファイルで実行した後、以前のログ ファイルの内容は失われます。だから、それを知っておいてください!一方、 を使用すると、ファイルが回転すると、プロセスを再起動するまでデータの取得が停止します (また、ではなくtail -fを使用しない限り、古いデータも吹き飛ばされます)。>>>

于 2011-12-01T04:08:39.113 に答える
0

その他のアイデア: "tail -F -n +1" は、ログ ファイルのローテーションを追跡し、ファイルの先頭から読み取ります。また、ログに実際に POST 行が含まれていると確信していますか? ちょっと聞いてみます...最後に、ファイルのアクセス許可は適切ですか?

于 2011-12-01T04:22:16.317 に答える
0

これをシェルスクリプトで実行してみてください。

tail -f access_log | while read r ; do 
      echo $r | grep 'POST[[:space:]]*/index.php' >> out
done

これにより、厄介なフラッシングの問題が解消されるはずです。

于 2011-12-01T04:12:12.127 に答える