#!/usr/bin/perl

# Copyright (C) 2001 NEC Corporation
# All Rights Reserved.

# RCS: $Id: wbmc_tripcron,v 1.1.1.1 2004/09/09 08:14:21 snavi Exp $


################################################
# 定期実行（○時間おき）のCron初回実行コマンド #
#            wbmc_tripcron                     #
# 内容                                         #
# 　○時間おきのコマンドを作成し、/etc/crontab #
# 　に登録する。crontabに登録されている、この  #
# 　コマンド（wbmc_tripcron）は削除する。      #
################################################

# 必要な関数があればインポート
require "/opt/nec/wbmc/lib/wbmc.pl";

# 変数定義
local(@conf) = ();
local(@tab) = ();
my($i);
my($chkpiriod,$chkcycletime,$chkstarttime);
my($datapiriod);
my($tripchkcmd);
my($trip_conf) = "/etc/opt/nec/wbmc/wbmc_tripconf";
my($trip_conf_lock) = "wbmc_tripconf";

# 環境設定ファイルの読み込み
# 読み込み中、ファイルの内容を変更されないようロックをかける。
# 
@conf = ();
if (-f $trip_conf) {
    if (!&readFile($trip_conf, $trip_conf_lock, *conf)) {
		print '環境設定ファイルの読み込みに失敗しました。';
        exit(1);
    }
}
# 環境設定ファイルの内容を変数に格納
for ($i = 0; $i < @conf; $i++) {
    if ($conf[$i] =~ /^\s*CHKPIRIOD\s*=\s*(.*)\s*$/) {
        $chkpiriod = $1;
    } elsif ($conf[$i] =~ /^\s*CHKCYCLETIME\s*=\s*(.*)\s*$/) {
        $chkcycletime = $1;
    } elsif ($conf[$i] =~ /^\s*CHKSTARTTIME\s*=\s*(.*)\s*$/) {
        $chkstarttime = $1;
    } elsif ($conf[$i] =~ /^\s*DATAPIRIOD\s*=\s*(.*)\s*$/) {
        $datapiriod = $1;
	}
}

# サイクル指定時のcrontabの時間を作成
# 時間指定は[0-23]なので、23を超えた分は、-24している
if ($chkcycletime != 1) {
    $cyclehour = "$chkstarttime";
    for ($i=0 ; $i < 24 / $chkcycletime -1 ; $i++) {
        $chkstarttime += $chkcycletime;
        if ($chkstarttime > 23) {
            $chkstarttime -= 24;
        }
	    $cyclehour .= "\,$chkstarttime";
    }
} else {
    $cyclehour = '*';
}

# コマンド作成
# 自動実行が"CYCLE"の場合のコマンド作成
if ($chkpiriod eq "CYCLE") {
	if($datapiriod eq "NO") {
		$tripchkcmd = "0 $cyclehour * * * root /opt/nec/wbmc/bin/wbmc_trip -c\n";
	} elsif ($datapiriod eq "SAME"){
		$tripchkcmd = "0 $cyclehour * * * root /opt/nec/wbmc/bin/wbmc_trip -i\n";
	} elsif ($datapiriod eq "DAILY"){
		$tripchkcmd = "0 $cyclehour * * * root /opt/nec/wbmc/bin/wbmc_trip -c\n";
	} else {
		print "設定ファイルの値が不正なため、自動実行のコマンドを作成できませんでした。";
		exit(1);
	}
}


# crontab追加処理
#  wbmc_tripcronの行を削除し、wbmc_trip -[ic]を追加する。
#  wbmc_tripで、実際の自動実行やDB更新処理を行う。

# 環境設定ファイルの読み込み
# 読み込み中、ファイルの内容を変更されないようロックをかける。
# バックアップ等の作業と重なった場合に、ロックが有効になるよう、
# ロックファイル名は他のプロセスで使用しているものを使用する

if (!&readFile("/etc/crontab", "crontab", *tab)) {
	print '設定ファイル(/etc/crontab)の読み込みに失敗しました。';
	exit(1);
}

# 既にあるwbmc_tripcronの行を、wbmc_tripコマンドに置換（配列操作）
for ($i = 0; $i < @tab; $i++) {
    if ($tab[$i] =~ /\/opt\/nec\/wbmc\/bin\/wbmc_tripcron\s*/) {
        splice(@tab, $i, 1, $tripchkcmd);
    }
}

# ファイルに書き込み
if (!&writeFile("/etc/crontab", "crontab", @tab)) {
	print '設定ファイル(/etc/crontab)の書き込みに失敗しました。';
	exit(1);
}
system ("/etc/rc.d/init.d/crond restart &> /dev/null");

