WEBサイトを使ってサーバーの生き死に確認を行うことは、複数のサーバー管理を行う上で必須です。
shellスクリプトを使う場合は「PING」コマンドで確認ができるが、PHPを使った方法をいくつか考えてみた。
javascriptでAJAXを使って定期的にサーバー生存確認を行うことで、サイトでリアルタイムに行うことが可能になる。
fsockopenを使ってPING
$host = "192.168.1.1";
$port = 80;
$timeout = 1;
$fP = fSockOpen($host, $port, $errno, $errstr, $timeout);
$res = ($fP) ? 1 : 0;
fclose($fP);
echo $res;
$hostで対象サーバーのアドレスを登録しよう。
サーバーが起動している時は「1」、ダウンしている時は「0」が表示される。
この方法では、80番ポートに送信しているので、webサーバーしか確認ができない。
execコマンドを使ってPING
$host = '192.168.1.17';
$r = exec(sprintf('ping -c 1 -W 1 %s', escapeshellarg($host)), $res, $rval);
echo $rval === 0;
今回は、execを使ってシステムコマンドを使って扱っている。PINGコマンドでオプションを使っているのでLINUX専用だが、精度は悪く無い。
「-W」でタイムアウトを1秒にセットしているが、よほど遠くのサーバーを確認しないかぎり問題ないはずだ。
htmlにセットしてみる
<div id="ping">--</div>
<script>
/**
* Ajax
*/
var $$ = {};
$$.ajax = {
xmlObj:function(f){
var r=null;
try{
r=new XMLHttpRequest();
}
catch(e){
try{
r=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
r=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
return null;
}
}
}
return r;
},
/**
* XMLHttpRequestオブジェクト生成
*/
set:function( option ){
if(!option){return}
$$.ajax.httpoj = $$.ajax.createHttpRequest();
if(!$$.ajax.httpoj){return;}
//open メソッド;
$$.ajax.httpoj.open( option.method , option.url , option.async );
$$.ajax.httpoj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//受信時に起動するイベント;
$$.ajax.httpoj.onreadystatechange = function(){
//readyState値は4で受信完了;
if ($$.ajax.httpoj.readyState==4){
//コールバック
option.onSuccess($$.ajax.httpoj.responseText);
}
};
//query整形
var data = [];
if(typeof(option.query)!="undefined"){
for(var i in option.query){
data.push(i+"="+encodeURIComponent(option.query[i]));
}
}
if(typeof(option.querys)!="undefined"){
for(var i=0;i<option.querys.length;i++){
data.push(option.querys[i][0]+"="+encodeURIComponent(option.querys[i][1]));
}
}
//send メソッド
if(data.length){//console.log(data.join("&"));
$$.ajax.httpoj.send( data.join("&") );
}
else{
$$.ajax.httpoj.send( "" );
}
},
createHttpRequest:function(){
//Win ie用
if(window.ActiveXObject){
try {
//MSXML2以降用;
return new ActiveXObject("Msxml2.XMLHTTP")
}
catch(e){
try {
//旧MSXML用;
return new ActiveXObject("Microsoft.XMLHTTP")
}
catch(e2){
return null
}
}
}
//Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用;
else if(window.XMLHttpRequest){
return new XMLHttpRequest()
}
else{
return null
}
},
//コールバック関数 ( 受信時に実行されます );
onSuccess:function(oj){
//レスポンスを取得;
var res = oj.responseText;console.log(res);
//ダイアログで表示;
if(res && res.match(/^[a-z|$]/)){
eval(res);
}
}
};
$$.init = function(){
$$.ajax.set({
url:"ping.php",
method:"post",
async:true,
onSuccess:function(res){
$$.setMessage(res);
setTimeout($$.init,3000);
}
});
};
</script>
「ping.php」は先述したPHPのどちらかのバージョンを書き込んでおけば、3秒毎に確認を行い、生き死に確認ができるWEBページが作れる。
もっと簡単に行えればいいのだが・・・
0 件のコメント:
コメントを投稿