#!/usr/bin/perl 
#
#
# サーバ及び各サービスの死活判断及びファイル書き込みコマンド
#
# getdata [-t second] [-ip IPaddress] 
#        -t     指定された秒数sleep状態になる
#        -ip    指定されたIPに対してのみ処理を行う
#        無し		/etc/opt/nec/wbmc/servers.confに存在するIP全てに処理を行う
#
if ($ARGV[0] eq "-d") {
    $DEBUG=1;
    shift(@ARGV);
}

require "/opt/nec/wbmc/adm/z99msv/plurservers.pl";

use Socket;

# getdataの設定をcronから無条件で削除

$msg = "";
$msg = &Delcrongetdata();

if($msg){
	print "$msg";
	&writeDataLog("$msg", "getdata", "$WBMC_SERVERS_LOG");
	exit;
}

# すでにgrtdataが実行されているかについて調べる

if(-e "$WBMC_GETDATA_PID"){

# ポーリングの場合のみ自分自身を終了
	if($ARGV[0] eq "-t"){
		exit;
	}

# 先に実行されているgetdataを終了させる

	if(!(&readDataFile("$WBMC_GETDATA_PID", *line))){
		print "IDデータファイルの読み込みに失敗しました。";
		&writeDataLog("can't read pid", "getdata", "$WBMC_SERVERS_LOG");
		exit;
	}

	kill (9, $line[0]);

}

# 現在実行しているgetdataのPIDを持つ

if(!open(DATA, "> $WBMC_GETDATA_PID")){
	print "IPデータファイルの書き込みに失敗しました。";
	&writeDataLog("can't write pid", "getdata", "$WBMC_SERVERS_LOG");
	exit;
}

print DATA $$;
close (DATA);

# オプションによる切り分け

$flg = "";
@ipadd = ();
$sleep = "";

if ($ARGV[0] eq "-ip") {
	$ipadd[0] = $ARGV[1];
}else{
	if($ARGV[0] eq "-t"){
		$sleep = $ARGV[1];
		sleep $sleep;
	}

# servers.confに登録されている全サーバのIPアドレスを取得する

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		print "server.confの読み込みに失敗しました。";
		&writeDataLog("can't read servers.conf_1", "getdata", "$WBMC_SERVERS_LOG");
		exit;
	}

	$j = 0;
	for($i = 0; $i < @line; $i++){
		if($line[$i] =~ /^<SERVER\s+(.+)>/){
			$ipadd[$j++] = $1;
		}
	}
}

for($ip = 0; $ip < @ipadd; $ip++){

# 監視される各サーバの情報を得る。

	$recmsg = "";
	$recmsg = &getServerData($ipadd[$ip]);
if ( $DEBUG ) {
print "DBG:----\n";
print "$recmsg";
print "DBG:----\n";
}
	@getdata = ();
	@getdata = split(/\n/, $recmsg);
	@port = ();
	@server = ();
	@netstat = ();
        @systemstat = ();

# 監視されるサーバからの情報の処理を行う。

	if($getdata[0] eq "OK"){
		$server = "";
		$server = "on";
		$j = $k = $l = 0;
		for($i = 0; $i < @getdata; $i++){
			if($getdata[$i] =~ /<PORT>/){
				$flg = 1;
				next;
			}elsif($getdata[$i] =~ /<SERVER>/){
				$flg = 2;
				next;
			}elsif($getdata[$i] =~ /<NETSTAT>/){
				$flg = 3;
				next;
			}elsif($getdata[$i] =~ /<SYSTEMSTAT>/){
				$flg = 4;
				next;
			}elsif($getdata[$i] =~ /<\/PORT>/){
				$flg = 0;
				next;
			}elsif($getdata[$i] =~ /<\/SERVER>/){
				$flg = 0;
				next;
			}elsif($getdata[$i] =~ /<\/NETSTAT>/){
				$flg = 0;
				next;
			}elsif($getdata[$i] =~ /<\/SYSTEMSTAT>/){
				$flg = 0;
				next;
			}

			if($flg == 1){
				$port[$j++] = $getdata[$i];
			}elsif($flg == 2){
				$server[$k++] = $getdata[$i];
			}elsif($flg == 3){
				$netstat[$l++] = $getdata[$i];
			}elsif($flg == 4){
				$systemstat[$m++] = $getdata[$i];
			}
		}
	}else{
		$msg = &ErrorTreatment($ipadd[$ip]);
		if($msg){
			print "$msg";
			&writeDataLog("$msg", "getdata", "$WBMC_SERVERS_LOG");
			system("/bin/rm -f $WBMC_GETDATA_PID");
			exit;
		}
		next;
	}

# NETSTATの実行結果から必要部分のみ抽出

	@ipportnum = (); # IP:port番号の形式
	@portnum = ();	# port番号のみ

	for($i = 0; $i < @netstat; $i++){
		$ipportnum[$i] = (split(/\s+/,$netstat[$i]))[3];
		#$portnum[$i] = (split(/:/,$ipportnum[$i]))[1];
		$portnum[$i] = $ipportnum[$i];
		$portnum[$i] =~ s/^.*://;
	}

# SERVERTYPEによる情報の切り分け

	$type= "";
	$type = $server[0];

# スタンドアロン以外の場合、同グループのサーバのIPを採取する

	if($type != 10){
		$group = $server[1];
		for($i = 2; $i < @server; $i++){
			$group = join(":","$group","$server[$i]");
		}
	}

# URLに必要なPORT番号検索（マッチしない場合強制的に50090とする）

	$webport = 50090;
	for($i = 0;$i < @portnum;$i++){
		if($portnum[$i] == 50453){
			$webport = "";
			$webport = $portnum[$i];
			last;
		}
	}


# 監視されるサービスのport番号をサービス単位に切り分ける

	@jughttpd = ();
	@jugimapd = ();
	@jugpopd = ();
	@jugwebmail = ();
	$j = $k = $l= $m = 0;
	for($i = 0;$i < @port;$i++){
		@jugs = ();
		@jugs = split(/\s+/,$port[$i]);
		if($jugs[0] eq "Listen"){
			$jughttpd[$j++] = $jugs[1];
		}elsif($jugs[0] =~ /^imap/){
			$jugimapd[$k++] = (split(/=/,$jugs[0]))[1];
		}elsif($jugs[0] =~ /^pop/){
			$jugpopd[$l++] = (split(/=/,$jugs[0]))[1];
		}elsif($jugs[0] =~ /^http/){
			$jugwebmail[$m++] = (split(/=/,$jugs[0]))[1];
		}elsif($jugs[0] =~ /^webmail-http/){
			$jugwebmail[$m++] = (split(/=/,$jugs[0]))[1];
		}
	}

# HTTPDの死活判断

	$httpd = "";
	$httpd = &DeadOrAlive_1(*jughttpd, *ipportnum);

	# IMAPの死活判断

	$imapd = "";
	$imapd = &DeadOrAlive_1(*jugimapd, *portnum);

	# POPDの死活判断

	$popd = "";
	$popd = &DeadOrAlive_1(*jugpopd, *portnum);

	# WEBMAILの死活判断

	$webmail = "";
	$webmail = &DeadOrAlive_1(*jugwebmail, *portnum);

	# SENDMAILの死活判断

	$send = "";
	$send = &DeadOrAlive_2(25, *portnum);

	# NAMEDの死活判断

	$named = "";
	$named = &DeadOrAlive_2(53, *portnum);

	# LDAPDの死活判断

	$ldapd = "";
	$ldapd = &DeadOrAlive_2(389, *portnum);

	# FTPDの死活判断

	$ftpd = "";
	$ftpd = &DeadOrAlive_2(21, *portnum);

	# NFSDの死活判断

	$nfsd = "";
	$nfsd = &DeadOrAlive_2(2049, *portnum);

	# SMBDの死活判断

	$smbd = "";
	$smbd = &DeadOrAlive_2(139, *portnum);

	# NTPDの死活判断

	$ntpd = "";
	$ntpd = &DeadOrAlive_2(123, *portnum);

	# SNMPDの死活判断

	$snmpd = "";
	$snmpd = &DeadOrAlive_2(161, *portnum);

	# SSHDの死活判断

	$sshd = "";
	$sshd = &DeadOrAlive_2(22, *portnum);

	# TELNETの死活判断

	$telnet = "";
	$telnet = &DeadOrAlive_2(23, *portnum);

	# chksvcの死活判断

	$chksvc = "";
	$chksvc = &DeadOrAlive_3("chksvc", *systemstat);

# データの更新

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		print "server.confの読み込みに失敗しました。";
		&writeDataLog("can't read servers.conf_2", "getdata", "$WBMC_SERVERS_LOG");
		system("/bin/rm -f $WBMC_GETDATA_PID");
		exit;
	}

	$flg = 0;
	for($i = 0; $i < @line; $i++){
		if($line[$i] =~ /^<SERVER\s+(.+)>/){
			$dataip = "";
			$dataip = $1;
			$dataip =~ s/\s+//g;
			if($dataip eq "$ipadd[$ip]"){
				$flg = 1;
			}
		}elsif($line[$i] =~ /^<\/SERVER>/){
			$flg = 0;
		}

		if($flg == 1){
			if($line[$i] =~ /^PORT/){
				$line[$i] = "";
				$line[$i] = "PORT\t$webport\n";
			}elsif($line[$i] =~ /^TYPE/){
				$line[$i] = "";
				$line[$i] = "TYPE\t$type\n";
			}elsif($line[$i] =~ /^GROUP/){
				$line[$i] = "";
				$line[$i] = "GROUP\t$group\n";
			}elsif($line[$i] =~ /^ONE/){
				$line[$i] = "";
				$line[$i] = "ONE\t$server\n";
			}elsif($line[$i] =~ /^HTTPD/){
				$line[$i] = "";
				$line[$i] = "HTTPD\t$httpd\n";
			}elsif($line[$i] =~ /^SEND/){
				$line[$i] = "";
				$line[$i] = "SEND\t$send\n";
			}elsif($line[$i] =~ /^POPD/){
				$line[$i] = "";
				$line[$i] = "POPD\t$popd\n";
			}elsif($line[$i] =~ /^IMAPD/){
				$line[$i] = "";
				$line[$i] = "IMAPD\t$imapd\n";
			}elsif($line[$i] =~ /^WEBMAIL/){
				$line[$i] = "";
				$line[$i] = "WEBMAIL\t$webmail\n";
			}elsif($line[$i] =~ /^NAMED/){
				$line[$i] = "";
				$line[$i] = "NAMED\t$named\n";
			}elsif($line[$i] =~ /^LDAPD/){
				$line[$i] = "";
				$line[$i] = "LDAPD\t$ldapd\n";
			}elsif($line[$i] =~ /^FTPD/){
				$line[$i] = "";
				$line[$i] = "FTPD\t$ftpd\n";
			}elsif($line[$i] =~ /^NFSD/){
				$line[$i] = "";
				$line[$i] = "NFSD\t$nfsd\n";
			}elsif($line[$i] =~ /^SMBD/){
				$line[$i] = "";
				$line[$i] = "SMBD\t$smbd\n";
			}elsif($line[$i] =~ /^NTPD/){
				$line[$i] = "";
				$line[$i] = "NTPD\t$ntpd\n";
			}elsif($line[$i] =~ /^SNMPD/){
				$line[$i] = "";
				$line[$i] = "SNMPD\t$snmpd\n";
			}elsif($line[$i] =~ /^SSHD/){
				$line[$i] = "";
				$line[$i] = "SSHD\t$sshd\n";
			}elsif($line[$i] =~ /^TELNET/){
				$line[$i] = "";
				$line[$i] = "TELNET\t$telnet\n";
			}elsif($line[$i] =~ /^CHKSVC/){
				$line[$i] = "";
				$line[$i] = "CHKSVC\t$chksvc\n";
			}
		}
	}


# データの結果をservers.confに書き込む

	if(&writeDataFile("$WBMC_SERVERS_CONF", "servers.conf", @line) == 0){
		print "server.confの書き込みに失敗しました。";
		&writeDataLog("can't write servers.conf_1", "getdata", "$WBMC_SERVERS_LOG");
		system("/bin/rm -f $WBMC_GETDATA_PID");
		exit;
	}
}

# 最終更新時間を書き込む
$msg = &WriteTime();
if($msg){
	print "最終更新時間の書き込みに失敗しました。";
	&writeDataLog("can't write time", "getdata", "$WBMC_SERVERS_LOG");
	system("/bin/rm -f $WBMC_GETDATA_PID");
	exit;
}

# クーロンに設定する

$msg = &WriteCrontab();
if($msg){
	print "クーロンの書き込みに失敗しました。";
	&writeDataLog("can't write cron", "getdata", "$WBMC_SERVERS_LOG");
	system("/bin/rm -f $WBMC_GETDATA_PID");
	exit;
}

system("/bin/rm -f $WBMC_GETDATA_PID");

exit;
#-----------------------------------------------------------------------------
# 死活判断の関数
# port番号が複数の場合
# 名前
#   DeadOrAlive_1 - 複数のポート番号を持つサービスの死活判断を行う
# 形式
#   DeadOrAlive_1(@serviceport, @netstatport)
# 引数
#   @serviceport サービスのport番号(Webサーバの情報については『IP:port番号』、その他のサービスはport番号のみ)
#   @netstatport netstatの実行結果のport番号(Webサーバの情報については『IP:port番号』、その他のサービスはport番号のみ)
# 戻り値
#   on	サービス起動中
#		off	サービス停止

sub DeadOrAlive_1
{
	local(*serviceport, *netstatport) = @_;
	my(@flg) = ();
	my($jug, $j) = "";

	$jug = "on";
	for($i = 0;$i < @serviceport;$i++){
		$flg = 0;
		for($j = 0;$j < @netstatport;$j++){
			if($serviceport[$i] eq $netstatport[$j]){
				$flg = 1;
				last;
			}
		}
		if($flg == 0){
			$jug = "off";
			last;
		}
	}
	return($jug);
}

# 死活判断の関数
# 名前
#   DeadOrAlive_2 - サービスの死活判断を行う
# 形式
#   DeadOrAlive_2($port, *netstatport)
# 引数
#   $port				 サービスのport番号
#   @netstatport netstatの実行結果のport番号
# 戻り値
#   on	サービス起動中
#		off	サービス停止

sub DeadOrAlive_2
{
	local($port, *netstatport) = @_;
	my($jug, $i) = "";
	$jug = "off";

	for($i = 0;$i < @netstatport;$i++){
		if($port eq "$netstatport[$i]"){
			$jug = "on";
			last;
		}
	}
	return($jug);
}

# 死活判断の関数
# 名前
#   DeadOrAlive_3 - サービスの死活判断を行う
# 形式
#   DeadOrAlive_3($system, *systemstat)
# 引数
#   $system	 サービスの種類
#   @systemstat  サービスの種類:サービスの状態
# 戻り値
#   on	サービス起動中
#		off	サービス停止

sub DeadOrAlive_3
{
	local($system, *systemstat) = @_;
	my($jug, $i) = "";
	$jug = "off";

	for($i = 0;$i < @systemstat;$i++){
		$sys = (split(/:/,$systemstat[$i]))[0];
		$stat = (split(/:/,$systemstat[$i]))[1];
		if($system eq $sys){
			$jug = $stat;
			last;
		}
	}
	return($jug);
}

# エラーが発生した場合の関数
# 名前
#   ErrorTreatment - 編集時判断できなかったサーバの処理
# 形式
#   ErrorTreatment($ipadd)
# 引数
#   $ipadd	サーバのIPアドレス
# 戻り値
#		成功 NULL
#		失敗 エラーメッセージ

sub ErrorTreatment
{
	my($ipadd) = @_;
	my($dataip, $flg, $msg, $errormsg, $i) = "";
	local(@line) = ();

# servers.confからデータを読み込む

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		$errormsg = "設定ファイルの読み込みに失敗しました。";
		return ($errormsg);
	}

# servers.confに不明サーバとして表示されるデータの形で書き込む

	$flg = 0;
	for($i = 0;$i < @line;$i++){
		if($line[$i] =~ /^<SERVER\s+(.+)>/){
			$dataip = $1;
			$dataip =~ s/\s+//g;
			if($dataip eq "$ipadd"){
				$flg = 1;
			}
		}elsif($line[$i] =~ /^<\/SERVER>/){
			$flg = 0;
		}

		$msg = "off";
		if($flg == 1){
			if($line[$i] =~ /^PORT/){
				$line[$i] = "";
				$line[$i] = "PORT\t\n";
			}elsif($line[$i] =~ /^TYPE/){
				$line[$i] = "";
				$line[$i] = "TYPE\t\n";
			}elsif($line[$i] =~ /^GROUP/){
				$line[$i] = "";
				$line[$i] = "GROUP\t\n";
			}elsif($line[$i] =~ /^ONE/){
				$line[$i] = "";
				$line[$i] = "ONE\t$msg\n";
			}elsif($line[$i] =~ /^HTTPD/){
				$line[$i] = "";
				$line[$i] = "HTTPD\t$msg\n";
			}elsif($line[$i] =~ /^SEND/){
				$line[$i] = "";
				$line[$i] = "SEND\t$msg\n";
			}elsif($line[$i] =~ /^POPD/){
				$line[$i] = "";
				$line[$i] = "POPD\t$msg\n";
			}elsif($line[$i] =~ /^IMAPD/){
				$line[$i] = "";
				$line[$i] = "IMAPD\t$msg\n";
			}elsif($line[$i] =~ /^WEBMAIL/){
				$line[$i] = "";
				$line[$i] = "WEBMAIL\t$msg\n";
			}elsif($line[$i] =~ /^NAMED/){
				$line[$i] = "";
				$line[$i] = "NAMED\t$msg\n";
			}elsif($line[$i] =~ /^LDAPD/){
				$line[$i] = "";
				$line[$i] = "LDAPD\t$msg\n";
			}elsif($line[$i] =~ /^FTPD/){
				$line[$i] = "";
				$line[$i] = "FTPD\t$msg\n";
			}elsif($line[$i] =~ /^NFSD/){
				$line[$i] = "";
				$line[$i] = "NFSD\t$msg\n";
			}elsif($line[$i] =~ /^SMBD/){
				$line[$i] = "";
				$line[$i] = "SMBD\t$msg\n";
			}elsif($line[$i] =~ /^NTPD/){
				$line[$i] = "";
				$line[$i] = "NTPD\t$msg\n";
			}elsif($line[$i] =~ /^SNMPD/){
				$line[$i] = "";
				$line[$i] = "SNMPD\t$msg\n";
			}elsif($line[$i] =~ /^SSHD/){
				$line[$i] = "";
				$line[$i] = "SSHD\t$msg\n";
			}elsif($line[$i] =~ /^TELNET/){
				$line[$i] = "";
				$line[$i] = "TELNET\t$msg\n";
			}
		}
	}

  if(&writeDataFile("$WBMC_SERVERS_CONF", "servers.conf", @line) == 0){
		$errormsg = "$WBMC_SERVERS_CONFファイルの書き込みに失敗しました。";
		return ($errormsg);
  }

return "";

}

# 最終更新時間を書き込む関数
# 名前
#   WriteTime - ファイルの最終更新時間を書き込む
#		※実際のファイルの作成時間と誤差が生じる
# 形式
#   WriteTime()
# 戻り値
#		成功 NULL
#		失敗 エラーメッセージ

sub WriteTime
{
	local(@line) = ();
	my(@stat) = ();
	my($stime, $sec, $min, $hour, $mday, $mon, $year, $errormsg, $i) = "";


# servers.confの編集時間を採取する。

	@stat =  stat "$WBMC_SERVERS_CONF";
	$stime = $stat[9];
	($sec, $min, $hour, $mday, $mon, $year) = localtime($stime);
	$year += 1900;
	$mon += 1;

	$mon = &ChangeNum($mon);
	$mday = &ChangeNum($mday);
	$hour = &ChangeNum($hour);
	$min = &ChangeNum($min);
	$sec = &ChangeNum($sec);

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		$errormsg = "設定ファイルの読み込みに失敗しました。";
		return($errormsg);
	}

	for($i = 0; $i < @line; $i++){
		if($line[$i] =~ /^\s*RenewalTime=(.+)$/){
			$line[$i] = "";
			$line[$i] = "RenewalTime=$year/$mon/$mday\t$hour:$min:$sec\n";
			last;
		}
	}

  if(&writeDataFile("$WBMC_SERVERS_CONF", "servers.conf", @line) == 0){
		$msg = "$WBMC_SERVERS_CONFファイルの書き込みに失敗しました。";
		return ($msg);
  }

return"";

}

# 数値の桁数を判定し１桁の数値を２桁にする関数(1→01)
# 名前
#   ChangeNum - １桁の数値を２桁にする
# 形式
#   ChangeNum($num)
# 戻り値
#		変換した数値

sub ChangeNum
{
	my($num) = @_;
	my($renum) = "$num";

	if($num <= 9){
		$renum = "0$num";
	}

return($renum);
}

# crontab の変更
# 名前
#   WriteCrontab - crontabの書き換え
# 形式
#   WriteCrontab()
# 戻り値
#		成功 NULL
#		失敗 エラーメッセージ

sub WriteCrontab
{
	local(@tab) = ();
	local(@ptime) = ();
	my($hour_str, $min_str, $day_str, $month_str, $week_str) = "";
	my($crontab_str, $sec, $time, $msg, $i) = "";

	$hour_str = $min_str = $day_str = $month_str = $week_str = "*";

	if(!(&readDataFile("/etc/crontab", *tab))){
		$msg = "設定ファイルの読み込みに失敗しました。";
		return ($msg);
	}

# 既にある設定を削除
	for ($i = 0; $i < @tab; $i++) {
  	  if ($tab[$i] =~ /getdata\s*-t/) {
    	    splice(@tab, $i, 1);
    	}
	}

# 設定ファイルを読み込む
	if (!&readDataFile("$WBMC_SERVERS_CONF", *ptime)) {
		$msg = "設定ファイルの読み込みに失敗しました。";
		return ($msg);
	}
	
	for($i = 0; $i < @ptime; $i++){
		if($ptime[$i] =~ /^RenewalTime=(.+)\t(.+):(.+):(.+)/){
			$hour_str = $2;
			$min_str = $3;
			$sec = $4;
		}elsif($ptime[$i] =~ /^PollingTime=(.+)/){
			$time = $1;
		}
	}

# crontab 文字列作成
	if ($time != 0) {
		$min_str = $min_str + $time;
		if($min_str >= 60){
			$hour_str = $hour_str + 1;
			$min_str = $min_str % 60;
		}
		if($hour_str >= 24){
			$hour_str = $hour_str - 24;
		}
    $crontab_str = "$min_str $hour_str $day_str $month_str $week_str root /opt/nec/wbmc/bin/getdata -t $sec > /dev/null\n";
    push(@tab, $crontab_str);
	}

# crontabに書き込む
  if(&writeDataFile("/etc/crontab", "corntab", @tab) == 0){
		$msg = "/etc/crontabファイルの書き込みに失敗しました。";
		return ($msg);
  }

# cronを再起動する
	$rc = system("/etc/rc.d/init.d/crond restart > /dev/null");
	if ($rc) {
		$msg = "自動更新の実行タイミングの設定に失敗しました。";
		return ($msg);
	}
return"";
}

# 監視されるサーバの情報を得る関数
# 名前
#   getServerData - 監視されるサーバの情報を得る
# 形式
#   getServerData($ipadd)
# 引数
#   $ipadd	サーバのIPアドレス
# 戻り値
#		成功 監視されるサーバのデータ
#		失敗 エラーメッセージ

sub getServerData
{
	local($ipadd) = @_;
	my($port, $ipaddr, $sockaddr, $proto, $msg, $recdata, $getdata) = "";

	$port = "50100";
	$ipaddr = inet_aton($ipadd);
	$sockaddr = pack_sockaddr_in($port,$ipaddr);

# プロトコル番号を得る。

	$proto = getprotobyname('tcp');

# ソケットをオープンする。

	if(!socket(SOCK,PF_INET,SOCK_STREAM,$proto)){
		$msg = "socket error\n";
		return ($msg);
	}

# コネクトする。

	if(!connect(SOCK,$sockaddr)){
		$msg = "connect error\n";
		close SOCK;
		return ($msg);
	}

# 被監視サーバにデータを要求

	select(SOCK); $|=1; select(STDOUT);
	print SOCK "getdata\n";

# 被監視サーバからデータを受け取る

	while (<SOCK>){
		if($_ eq "last_data"){
			last;
		}
		else{
			$getdata .= $_;
		}
        }

	close SOCK;
	return ($getdata);
}

sub sig_handler
{
	my($msg) = @_;
	if($msg){
		return ($msg);
	}
}

# crontabからgetdataの設定を削除する
# 名前
#   Delcrongetdata - 編集時判断できなかったサーバの処理
# 形式
#   Delcrongetdata()
# 戻り値
#		成功 NULL
#		失敗 エラーメッセージ

sub Delcrongetdata
{
	my($i, $rc, $msg) = "";
	local(@tab) = ();

	if(!(&readDataFile("/etc/crontab", *tab))){
		$msg = "設定ファイルの読み込みに失敗しました。";
		return ($msg);
	}

# 既にある設定を削除
	for ($i = 0; $i < @tab; $i++) {
  	if ($tab[$i] =~ /getdata\s*-t/) {
 	 	  splice(@tab, $i, 1);
			last;
 		}
	}

# crontabに書き込む
	if(&writeDataFile("/etc/crontab", "corntab", @tab) == 0){
		$msg = "/etc/crontabファイルの書き込みに失敗しました。";
		return ($msg);
	}

# cronを再起動する
	$rc = system("/etc/rc.d/init.d/crond restart > /dev/null");
	if ($rc) {
		$msg = "自動更新の実行タイミングの設定に失敗しました。";
		return ($msg);
	}

return""; 
}

#-------------------------------------------------------------------------------

