- 追加された行はこの色です。
- 削除された行はこの色です。
*PHPとShell Command [#o905202e]
RIGHT:更新日&lastmod();
**ディレクトリのTree構造取得 [#m42efb28]
// ファイル転送ディレクトリをtree状に取得
$cmd = "/usr/bin/tree -NsD /home/user1/backup > /home/jcn/script/tmp.log";
$ret = exec($cmd);
$msg = $msg . "\n\n------------------\n\n";
// 文字化けを20h(半角スペースに変換 \40は8進でスペース)
$cmd = "/bin/cat /home/jcn/script/tmp.log | /usr/bin/tr '\240\302' '\040\040' > /home/jcn/script/user1_2.log";
$ret = exec($cmd);
**Ping 実行shell [#ue786ccb]
次のmypingというshellで出るlogをWebで表示
#! /bin/sh
date >> ~okada/log/pinglog
ping -c3 202.59.187.76 >> ~okada/log/pinglog
**Ping 実行shell Web表示サンプル [#x03d7ede]
<?php
$match ="^rtt";
$fp = popen("/usr/bin/tail -200 ~okada/log/pinglog", "r");
while (!feof($fp)) {
$line = fgets($fp, 1024);
printf("%s <br>\n", $line);
if (mb_ereg($match, $line)) {
echo " <HR> Date : ";
}
}
pclose($fp);
?>
[[サンプル:http://uso5004.mie-chukyo-u.ac.jp/~okada/mypinglog/]]
**Pingでリモートの監視(Error時メール自動発信) [#zafc3ff7]
-mbstringのInstall
# yum install php-mbstring
以下のshellスクリプトをpinglog生成のため作成し、cronに登録
#! /bin/sh
export LANG=ja_JP.eucJP
date > ~okada/log/pinglog.err
ping -c2 wwwism.dyndns.org >> ~okada/log/pinglog.err 2>&1 <==標準エラーも記録
ping -c2 202.91.212.66 >> ~okada/log/pinglog.err
/home/okada/script/icmpcheckmail.php > /dev/null 2>&1 <=nullに全てリダイレクトしないとcron実行ごと、管理メールが配信される。
icmpcheckmail.phpで
#!/usr/local/bin/php -q
<?php
//Ping(ICMP)でパケットロスしたらメールを送る
$mailaddress = "okada@abc.ac.jp";
$fp = @fopen("/home/okada/log/pinglog.err", "r");
if (!$fp) exit;
$flag = 0;
$msg= "";
$s0 = "";
$s = "";
while(!feof($fp)){
$s = fgets($fp, 4096);
$msg = $msg . $s;
if(strpos($s, "パケット損失 100%")){//ROUTER ERR :3
if(strpos($s0, "wwwism")){//DDNS ERROR :1
$flag = $flag + 1;
}else{// DHCP Changed :2
$flag = $flag + 2;
}
}
//DDNS Servce Error: DDNSで名前解決してくれない
if(strpos($s, "不明なホスト")) $flag = $flag + 4;
$s0 = $s;
}
if ($flag == 0) exec("/bin/echo 0 > /home/okada/log/pinglog.flag");
fclose($fp);
//ファイルから1行ごと配列の取り込む
$array = file("/home/okada/log/pinglog.flag");
$fflag = $array[0];
//メール送信
if($flag != 0 && $fflag == 0){
if($flag == 1){
$subject = "DDNS Error";
}else if($flag == 2){
$subject = "DHCP Changed";
}else if($flag == 3){
$subject = "ROUTER Error";
}else{
$subject = "DDNS Service Error";
}
$subject = mb_convert_encoding($subject, "ISO-2022-JP", "EUC-JP");
$subject = mb_encode_mimeheader($subject, "ISO-2022-JP", "B");
$fp = popen("/usr/bin/nkf -m0 | /usr/sbin/sendmail -oi -t","w");
fwrite($fp, "From: okada@abc.ac.jp\n");
fwrite($fp, "Reply-To: okada@abc.ac.jp\n");
fwrite($fp, "To: ". $mailaddress . "\n");
fwrite($fp, "Subject: " . $subject ."\n");
fwrite($fp, "Mime-Version: 1.0\n");
fwrite($fp, "Content-Type: text/plain; charset=ISO-2022-JP\n\n");
fwrite($fp, $msg . "\n");
pclose($fp);
//一度メールを送ったら、2回目のメールは出さないようにする
exec("/bin/echo 1 > /home/okada/log/pinglog.flag");
}
?>
その後
$ chmod a+x icmpcheckmail.php
で実行権を与える
/home/okada/log/pinglog.flagは0のときは正常1:のときはなんらかのエラー時で、このファイルに1があるときは、メール送信しない。初めてエラーになるときは0なのでメール送信し、その後1を立てるので、同じ内容を複数回メール送信しないようにしている。
--------------------------------------------------------------------------------
RIGHT:[[元ページ:https://wwwism.dyndns.org/hp/phpshell.htm]]