- PR -

wwwの監視

投稿者投稿内容
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-04-06 14:20
お世話になります。

wwwのサービスが起動されているかをチェックする
ツールを作成する必要があります。

具体的には、Cron等のジョブスケジューラで定期的にツールを実行し
wwwサービスが起動していない時は、管理者にメール送付したいです。

そこで、wwwサービスが起動していない時は
一般的にどう判断すればよいかを教えて頂きたいです。
なお、ツールを設置するサーバとwwwのサービスを提供するサーバは別になります。

Telnetでもよいのかと思ったのですが
シェルの中でコマンド入力待ちの状態をどうクリアするのかが不明です。

---------------
-bash-3.00# telnet xxx.xxx.xxx.xxx 8080
試行中...
xxx.xxx.xxx.xxx に接続されました。
エスケープ文字は '^]' です。
---------------

↑続けて、"GET /index.html HTTP/1.0"と入力したいが
 シェルでどう自動化するのかわかりません。

以上です。

あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-04-06 14:51
こんにちは。

リソースが十分にあるのならツールを用いた方が理想的だと思います。
※Nagios など。

シェルスクリプトのお話ですと、
対話的なプログラムを組むのに expect というものがあります。
http://www.linux.or.jp/JM/html/expect/man1/expect.1.html

ご参考までに。
kou
常連さん
会議室デビュー日: 2005/03/03
投稿数: 21
お住まい・勤務地: 内緒だに
投稿日時: 2006-04-06 15:44
こんにちは。

このてのツールはタイムアウトやらしきい値やら考慮すべき点がけっこうありますので、本格的にシステムの運用に使用するのであればこういった製品を使うのも手です。
(予算が許せばですが^^;)

http://wwwcsoft.kgt.co.jp/product/wsb/product_info.html
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-04-06 17:20
ご回答ありがとうございます。
教えていただいた情報をもとにお客様にご提案したいと思います。

ところで、自作する事になった場合を想定して
勉強しているのですが、実行すると結果が以下の通りになります。

---------------
</body>
</html>
接続がクローズされました。
ksh: パイプに書かれたデータを読み取るプロセスがありません。
#
---------------

実行したコマンドは以下になります。

#( sleep 1 ; echo GET /index.html HTTP/1.0; sleep 1 ; echo; sleep 1; echo; ) | telnet 172.30.6.112 8080 2>&1

メッセージ表示の考えられる原因を教えてください。
もしくは、もっとスマートな方法を押してください。



kou
常連さん
会議室デビュー日: 2005/03/03
投稿数: 21
お住まい・勤務地: 内緒だに
投稿日時: 2006-04-06 20:02
こんばんは。

telnetを使うよりも、wgetを使用したほうがよいと思います。

wget -q -O - http://foo.com | grep hogehoge

とかやって特定ページ内の特定の文字列(hogehoge)にヒットしなかった場合にメールを送るようなシェルを書いてやれば実現できると思います。

あとは色々調べてみてください。
かつ
ベテラン
会議室デビュー日: 2006/04/04
投稿数: 56
投稿日時: 2006-04-06 21:06
2004年12月号の日経Linuxに書いてありましたが、bash にはネットワーク機能があるそうです。
"--enable-net-redirections" を付けて configure すれば使えるのですが、CentOS 標準の bash では使えました。

このネットワーク機能を使うと、

$ exec 3<> /dev/tcp/localhost/80
$ echo -e "HEAD / HTTP/1.0\n\n" >&3
$ while read l <&3 ; do echo $l ; done

でWebサーバのヘッダーの取得が出来ます。

Webサーバが落ちていれば、Connection refused になるので、それを判断すればチェック出来ると思います。

$ exec 3<> /dev/tcp/localhost/26
bash: connect: Connection refused
bash: /dev/tcp/localhost/26: Connection refused

いかがでしょう?
たお
会議室デビュー日: 2005/11/22
投稿数: 13
投稿日時: 2006-04-06 23:05
モジュールインストールすれば、
perlならもうちょっと楽ですけど。
シェルじゃなきゃだめですかね?
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-04-07 16:52
お世話になります。

シェル(しかもsh)でないとダメらしく
また、追加モジュールは不可との事。

純粋にtelnetでやりたいとの事。

エラーメッセージを解析するしかなさそうですが
どなたか、教えていただけませんか?

---------------
# ./chk_www.sh
( sleep 1 ; echo GET /index.html HTTP/1.0; sleep 1 ; echo; sleep 1 ; echo ) | te
lnet 172.30.6.112 8080 > /tmp/chk_www.tmp.28974 2>&1
# ./chk_www.sh: パイプに書かれたデータを読み取るプロセスがありません。

スキルアップ/キャリアアップ(JOB@IT)