<?php
/*************************************************************************************************
	Name    : watch_firewall.php
	Acthion : バックグラウンドでfirewallをpingで監視して、
		  落ちてたらリセットスイッチを繋いでやる。
		  
		  /etc/rc.d/rc.localに起動コマンドを追加して使う。

	Spec.   : pingを5発打って全く帰ってこなかったらRBIOでリセット。
		  5分毎に確認するけど、リセット直後は10分待つ。
		  自身の起動とリセット動作時にログ記録。

								2008.07.14 Ver.0.01  Genki wrote
								2008.07.27 Ver.0.02  Genki edit.

	仕様
	Ver.0.01	とりあえず。
	
	Ver.0.02	ログファイルに自スクリプト起動時刻と、リセット動作時刻を記録するように。

***************************************************************************************************/
//各種設定
$logfile = "/home/…/…/rbio/watch_firewall.log";	//ログファイル
$timestamp = date("[Y-m-d H:i:s]");	//ログファイルに書き込むタイムスタンプ

//ログファイルに起動した旨書き込む
$fp = fopen($logfile,'a');
fputs($fp,"\n\n{$timestamp}\t---Start to watch firewall---\n\n");
fclose($fp);

while(1){	//無限ループ
	//pingを5発発射する。
	$msg =  `ping -c 5 firewall.hibi`;

	//100%返事がなかったら死んでると思われるのでリセット。
	if(ereg("100%",$msg)){
		//RBIO接続
		while(1){	//接続出来るまで何度もリトライ
			$sock = fsockopen("rbio",14000,$errorno,$errormsg,3);
			if($sock) break;
			sleep(1);
		}

		//リセットスイッチを1秒間押す。
		fputs($sock,"PCT2010\n");	//PCTnttt：n番目のリレーをttt*100msec動作させる。
		fgets($sock,16);
		$res = fgets($sock,16);
		fclose($sock);	//用事が済んだらクローズ

		//ログファイルにリセットした時刻を書き込む。
		$timestamp = date("[Y-m-d H:i:s]");
		$fp = fopen($logfile,'a');
		fputs($fp,"{$timestamp}\tReset the firewall machine.\n");
		fclose($fp);

		sleep(600);	//再起動中はping返ってこないので10分待機
		continue;	//待機後whileの先頭に。
	}

	//100%じゃない限りは生きてると思うので何もしない。
	sleep(300);	//5分ごとのチェックでいいかな。
}

