"/var/log/httpd/smup_access_log", limitsize=>256*1024*1024, daemon=>"httpd"); $file[] = array(logfile=>"/var/log/httpd/error_log", limitsize=>256*1024*1024, daemon=>"httpd"); $file[] = array(logfile=>"/var/log/httpd/access_log", limitsize=>256*1024*1024, daemon=>"httpd"); $file[] = array(logfile=>"/var/log/httpd/smup_error_log", limitsize=>256*1024*1024, daemon=>"httpd"); $file[] = array(logfile=>"/var/log/messages", limitsize=>32*1024*1024, daemon=>"syslogd"); $file[] = array(logfile=>"/var/log/secure", limitsize=>16*1024*1024, daemon=>"syslogd"); $file[] = array(logfile=>"/var/log/maillog", limitsize=>256*1024*1024, daemon=>"syslogd"); $file[] = array(logfile=>"/var/log/spooler", limitsize=>16*1024*1024, daemon=>"syslogd"); $file[] = array(logfile=>"/var/log/boot.log", limitsize=>32*1024*1024, daemon=>"syslogd"); $file[] = array(logfile=>"/var/log/cron", limitsize=>32*1024*1024, daemon=>"syslogd"); $file[] = array(logfile=>"/var/log/named/named.log", limitsize=>128*1024*1024, daemon=>"named"); $file[] = array(logfile=>"/var/log/named/queries.log", limitsize=>256*1024*1024, daemon=>"named"); $file[] = array(logfile=>"/var/log/procmail", limitsize=>256*1024*1024, daemon=>"procmail"); //killコマンド送るフラグの初期化 //確認データの"daemon"の中身の種類とそろえる $kill_flag = array(httpd=>0,syslogd=>0,named=>0,procmail=>0); $user = "genkikko"; //ファイル移動後に名義変更するID $group = "admin"; //とグループ $report_mail_address = "admin@genkikko.net"; //普通のメッセージを送るアドレス $warning_mail_address = "ひみつ@?.vodafone.ne.jp"; //警告を送るアドレス //イニシャライズ $dat = NULL; //メール本文用変数 $date = date("Ymd"); //YYYYMMDD取得 /************************************* ログファイル操作 ***************************************** 動作 それぞれのファイルサイズを取得して、 基準サイズ超えてるのがあったら移動先に日付つきで移動して該当デーモンの$kill_flagをたてる。 移動後のファイルの持ち主を自分のに。(sambaで扱いたいから。) 既存変数 $kill_flag FALSEで初期化してる。 $esc_dir 移動先 $file[] 移動するファイルの情報が入った配列 $dat メール本文に入れるあれ。空っぽに初期化されてる。 ********************************************************************************************************/ for($i=0;$file[$i];$i++){ //定義されたすべてのログファイルに対して $size = filesize($file[$i]['logfile']); //それぞれのファイルのサイズを取得して if($size > $file[$i]['limitsize']){ //リミットと比較。超えてるものに関しては $moving_file = $file[$i]['logfile']; //移動前ファイル名(フルパス) $basename = basename($moving_file); //ファイル名抽出 //移動先ファイル名の決定 for($n=0;;$n++){ $moved_file = "{$esc_dir}{$basename}.bak.{$date}-{$n}"; if(!file_exists($moved_file)){ $moved_archive = str_replace(".bak",null,$moved_file); $moved_archive = "{$moved_archive}.zip"; if(!file_exists($moved_archive)){ break; } } } exec("mv $moving_file $moved_file"); //移動する exec("chown {$user}:{$group} $moved_file"); //所有者変更 $kill_flag[$file[$i]['daemon']] |= TRUE; //TRUEとの論理和を取って該当デーモンのkillフラグを立てる $dat .= "\n".$moving_file; //メール本文にファイル名を追加 } } /************************************* デーモンリロード&報告メール発射 ***************************************** 動作 $kill_flagが立ってたらそれぞれのデーモンをリロードして報告メールを発射する。 失敗したら警告メール発射。 既存変数 $kill_flag 立ってたら動く。 $report_mail_address 報告メアド $warning_mail_address 警告メアド ********************************************************************************************************/ if($kill_flag['httpd']){ exec("/etc/rc.d/init.d/httpd reload",$httpd_reboot_msg); } if($kill_flag['syslogd']){ exec("kill -HUP `cat /var/run/syslogd.pid`"); } if($kill_flag['named']){ exec("rndc reload"); } if($kill_flag['procmail']){ touch("/var/log/procmail"); chmod("/var/log/procmail",0666); } if(mb_ereg("失敗",$httpd_reboot_msg[0])){ mb_send_mail("$report_mail_address,$warning_mail_address", '警告:httpd再起動失敗',"httpdのリロードに失敗しました。\n\nfrom:httpd_mv_errorlog.php\n\n",'from:server-master@genkikko.net'); } //報告メール発射 if($dat){ //一回でも$kill_flagが立ってたら$datが空じゃなくなってる。 $body = "報告$dat\nが指定サイズを超えたのでファイル移動および該当サービスをリロードしました。\n\nサービスの稼動状況を確認してください。\n\nhttp://www.genkikko.net/c_status.php\n\n"; mb_send_mail("$report_mail_address",'報告:デーモンリロード',$body,'from:server-master@genkikko.net'); } /************************************* 移動先ディレクトリサイズ確認&報告 ****************************** 動作 ログファイル移動先が10GBを超えてたら警告メール発射。 既存変数 $esc_dir 移動先ディレクトリ名 $report_mail_address 報告メアド $warning_mail_address 警告メアド ********************************************************************************************************/ $res = opendir($esc_dir); //ディレクトリリソース for($i=0;$ent[$i] = readdir($res);$i++){} //ファイル名を配列に取り込む for($i=2,$dir_size=0;$ent[$i];$i++){ //$i=0,1は./と../なのでパス。 $dir_size += filesize("{$esc_dir}{$ent[$i]}"); //ディレクトリサイズを加算。 } $dir_size_gb = round($dir_size/1073741824,2); //1GBで割って小数点以下2桁までに四捨五入。 if($dir_size_gb >= 10){ //10GB超えてたらメール発射。 $body = "ログファイルディレクトリのサイズが10GBを超えました。\n現在のログディレクトリサイズは{$dir_size_gb}GBです。"; mb_send_mail("$report_mail_address,$warning_mail_address",'警告:ログサイズ',$body,'from:server-master@genkikko.net'); } /************************************* メインHDD残り容量確認&報告 ****************************** 動作 メインHDDの残り容量が10GBを切ったら警告メール発射。 既存変数 $esc_dir 移動先ディレクトリ名 $report_mail_address 報告メアド $warning_mail_address 警告メアド ********************************************************************************************************/ $df = `df /dev/hda -m`; //-m:MB単位で。 while(ereg(" ",$df)){ //2連スペースを全部 $df = ereg_replace(" "," ",$df); //単体スペースに変換してから } $df = split(" ",$df); //スペースで分けると $df_gb = round($df[8]/1024,2); // $df[8];が空き容量(MB)になる if($df[8]<10240){ $body = "butagoriraの残り容量が10GBを切りました。\n現在の残り容量は{$dir_size_gb}GBです。"; mb_send_mail("$report_mail_addres,$warning_mail_address",'警告:残り容量',$body,'from:server-master@genkikko.net'); } /*************************************************************************************************/ ?>