stderrをパイプで処理する
いくつかのページが正常にブラウズできるかどうかをチェック。zabbixで設定してもいいのですが、暫定的な処理なのでちょろっとスクリプトを書いてすませることにしました。
チェック対象URIをリストにしてforでまわしてwget。戻り値が0なら200(または300)番台ってことでOKなのですが、一部だけ403(authentication error)でもOKってなところがある。
wgetに--server-responseをつけて、HTTPレスポンスコードをチェックすることにしました。ところがwgetがいろいろ情報を出力する先ってのがstderrなんですね。stdoutにはwgetでとってきた結果がでてくる。当然といえば当然か。
wget --server-response --output-document=/dev/null http://www.exapmle.com
ってなことをやると、こういう結果がstderrにでてきます。
--2014-06-24 09:21:43-- http://www.example.com/ www.example.com (www.example.com) をDNSに問いあわせています... 172.16.1.1 www.example.com (www.example.com)|172.16.1.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... HTTP/1.1 200 OK Date: Tue, 24 Jun 2014 00:13:56 GMT Server: Zope/(Zope 2.10.13-final, python 2.4.5, linux2) ZServer/1.1 Plone/3.1.7 X-Frame-Options: SAMEORIGIN Content-Type: text/html; charset=utf-8 Age: 534 X-Cache: HIT from www.exmple.com Via: 1.1 www.example.com (squid/3.4.5) Via: 1.1 www.example.com Vary: Accept-Encoding Content-Length: 13604 Keep-Alive: timeout=15 Connection: Keep-Alive 長さ: 13604 (13K) [text/html] `/dev/null' に保存中 100%[=====================================>] 13,604 --.-K/s 時間 0.03s 2014-06-24 09:21:43 (414 KB/s) - `/dev/null' へ保存完了 [13604/13604]
このうち、HTTPレスポンスコードだけが欲しい。
なのでstderrを/dev/stdoutへリダイレクトした上でgrep,awkへパイプ。
こうやりました。
$ wget --server-response --output-document=/dev/null http://www.exmple.com 2> /dev/stdout | grep 'HTTP/' | awk '{print $2}' 200