私は問題があります。N時間後にファイルを電子メールに送信するスクリプトがあります(crontabから実行)問題は、maillogからmysqlに出力しようとすることです。
ここにスクリプトがあります
#!/usr/bin/php
<?php
date_default_timezone_set("Europe/Chisinau");
$faxdir = '/var/spool/fax/';
$dir = opendir("/var/spool/fax/");
while(($file = readdir($dir)) !== false){
if (($file != ".") && ($file != "..")){
$mytime = date('d-m-Y H:i:s');
$sendfile = $file;
$findcaller = explode('_', $file);
$findcaller = explode('-', $file);
$findsrc = shell_exec('echo "'.$findcaller[0].'" | sed "s/[^_]*\_//"');
$findsrc = str_replace(array("\r","\n"),"",$findsrc);
$caller = shell_exec('echo "'.$findcaller[1].'" | sed "s/[^_]*\_//"');
$cutbillid = shell_exec('echo "'.$file.'" | sed "s/[^_]*\_//"');
$findnumber = shell_exec('echo "'.$cutbillid.'" | sed "s/[^-]*\-//"');
$findnumber=str_replace(array("\r","\n"),"",$findnumber);
$key = '.TIF';
$number=preg_replace('/'.$key.'.*/','',$findnumber);
$showstatus = shell_exec('/usr/sbin/lsof | grep "'.$faxdir.'"*"'.$number.'"');
if ($showstatus <> ""){
exit(0);
}else{
$db_link = mysql_connect("localhost", "root", "")
or die("Could not connect: " . mysql_error());
mysql_select_db("centrexdb");
$query = mysql_query("SELECT `fax2email` FROM users WHERE username='".$number."' AND faxstatus='1'");
$fax2email = mysql_fetch_array($query);
if ($fax2email[0] == ''){
$currdate = shell_exec('echo "'. date('Y-m-d_H:i:s') .'"');
$noemail = shell_exec('mv /var/spool/fax/"'.$file.'" /var/spool/fax-nomail/"'.$currdate.'"--"'.$file.'"');
} else {
$findcaller = explode('_', $file);
$findcaller = explode('-', $file);
$caller = shell_exec('echo "'.$findcaller[1].'" | sed "s/[^_]*\_//"');
$caller=str_replace(array("\r","\n"),"",$caller);
$sendmail = shell_exec('echo | mutt -a "'.$faxdir.'""'.$sendfile.'" -s "Fax From '.$findsrc.' to '.$number.'" "'.$fax2email[0].'"');
echo "executing";
unlink(''.$faxdir.''.$sendfile.'');
}
mysql_close($db_link);
}
}
sleep(45);
$dbnew = mysql_connect("localhost", "root", "")
or die("Could not connect: " . mysql_error());
mysql_select_db("FAX");
$myresult=shell_exec('cat /var/log/maillog |grep "to=<'.$fax2email[0].'>" |tail -n1');
echo $myresult;
$currentdate = shell_exec('echo "'. date('Y-m-d_H:i:s') .'"');
$umail = $fax2email[0];
mysql_query("INSERT into faxlog (Date, UserNumber, SourceNumber, UsedEmail, MailLog) VALUES('$mytime', '$number', '$findsrc',
'$umail', '$myresult')");
mysql_close($dbnew);
sleep(5);
}
exit(0);
?>
問題は、フォルダー内に複数のファイルがある場合、最初のファイル スクリプトがログから過去の値を返すことです。これは、ログの書き込みに時間がかかるためです。tail -f /var/log/maillog を実行したところ、mail コマンドが 45 秒遅れて実行されることがわかりました。私が理解しているように、ファイル送信でメインブロックを実行し、遅延後に(ログが書き込まれるように)ログコンテンツを取得する必要があります。どうすればそれができますか?