ある条件を入れると結果が戻らないコマンド。

昨日のエントリーで書いたコマンドに少々肉付けした、

grep -v -e '.*¥/choo1¥/.*HTTP.*' -e '.*¥/choo2¥/.*HTTP.*' /home/choo/logs/choo_log* | zgrep '.*¥[13¥/May¥/2009¥:0[0-9].*'| grep '.*HTTP.* 200 .*' > choo.txt

というコマンドを、exec関数を使ってPHPのプログラム上から実行しました。
grepした結果をテキストファイル(choo.txt)に出力する」
という処理を行うのですが、これは

  1. grepで整形した内容をファイルに出力
  2. 1のファイルをfopenして、中身を精査

…という処理を行うために必要なコマンドです(・∀・)


ところが!




テキストファイルは作られるのですが、中身が空っぽ…(´・ω・`)


原因は何だ?!
権限絡みの問題でも無さそうだし…


と思って調べてみたら、

zgrep '.*¥[13¥/May¥/2009¥:0[0-9].*'

の部分があるとファイルが空になることを突き止めました。



exec関数は、引数を指定して、そこに実行結果を抽出することもできますが…

exec($grepCommand, $arrayOutput);

↑$arrayOutputにコマンドの実行結果が配列として格納されます。


この
「配列に出力する」
方法だと、キチンとgrepの結果が取れるのですが、これだとあまり負荷軽減に
ならないと思うので、インフラエンジニアの方にも助力を仰いで、上記の
「テキストファイルが空になる」
事象の調査を引き続き行いました。

  1. grepそのものはキチンと動いている。
  2. ファイルの書き込みのところに問題がありそう。


実は、上記の
「execによるgrep
はループ処理で複数回行っていたのですが、最後のgrepの実行結果が空になっており、
それが既に生成されていたテキストファイルに上書きされていたことが判明…


だからテキストファイルを開いても空だったんですね…
お恥ずかしい…(´・ω・`)




帰り道に、なんとタヌキと遭遇!
バッチリ、目が合いました☆
アライグマに似てました(・∀・)