過去に
「logrotate & bash で日付付のログをバックアップする。」
っていうのをメモっているけど、別ファイルのbashをつくるのもめんどうなのでより簡単メモ
/var/log/httpd/*log {
daily
rotate 10
create
compress
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
EXT=date +%Y%m%d -d ‘1 days ago’
for f in $1;
do mv $f.1.gz $f.$EXT.gz;
done
endscript
}
EXT=date +%Y%m%d -d ‘1 days ago’
for f in $1;
do mv $f.1.gz $f.$EXT.gz;
done
が追加分、corn では、通常4時2分に起動するので、基本的に前日の日付をつけておく。
でもって、ローテートしたファイルをリネームしているだけ、
これだと、本来、「rotate 10」のところは、1でもいいのだけど、念のための保険で10回
にしているだけです。
こっちの方が簡単だな。
追記:2010.02.23
EXT=date +%Y%m%d -d ‘1 days ago’
の部分をそのままコピペすると、WPが変換かけてるのでうごきません。
「1 days ago」をシングルコーテーションで囲み直して、
「date +%Y%m%d -d ‘1 days ago’」全体を実行演算子で囲んでください。
でもって、バージョンの違いかわからないけど、compress が postrotate
の後に行われる場合がある。こうなると日付のファイル名にリネーム
できなくなる。(gzで圧縮した後のファイル名をリネームしようとしてるので)
という事で、さらに改訂。compressをlogrotateにまかせずに。
/var/log/httpd/*/*log {
daily
rotate 10
create
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
EXT=date +%Y%m%d -d ‘1 days ago’
for f in $1;
do
if [ -e $f.1 ] ; then
gzip $f.1;
mv $f.1.gz $f.$EXT.gz;
fi
done
endscript
}
といった形で、postrotateのなかでしてしまう。先に、killプロセス送っているので
ログも新しいファイルに書き出されているので、圧縮中のログが消える心配も
ないので、こちらの方がいいかも。
環境によって少しずつ違うみたいなのでメモ、
php5の環境で
modelの中から、actsAsを使わずに呼び出す場合は、
$this->Behaviors->attach(’Convert’);
$this->getConvertData( $data );//getConvertDataは、ConvertBehaviorの中のメソット
で、OK。
挙動の確認の為のサンプル
ini_set("display_errors","on");
class a
{
function aa()
{
$bool = false ;
if($bool){
//何かの処理
}else{
throw new Exception('error message');
}
}
}
class b extends a
{
function bb()
{
try{
$a = new a();
$a->aa();
}catch(Exception $e){
throw $e ;
}
}
}
class c extends b
{
function cc()
{
try{
$b = new b();
$b->bb();
}catch(Exception $e){
$this->_catchError($e);
}
}
function _catchError($e)
{
$error = “”;
$error .= “
\n”;
$error .= “Catch error in “. $e->getFile() . “ on line ” . $e->getLine() . “
\n”;
$error .= $e->getMessage() . “
\n”;
$error .= “trace
\n”;
$trace = $e->getTrace();
foreach($trace as $key => $val){
$error .= ““. $val['file'] . “ on line ” . $val['line'] . “”
.” in class = {$val['class']}”
.”, function = {$val['function']}”
.”, type = {$val['type']}”
.”, function ={$val['function']}”
// .”, args = ” . print_r($val['args'])
. “
\n”
;
}
print_r($e);
print $error ;
// mailが飛べば本番も安心だね
// mail(’admin@ecamlpe.com’,'php error’, $error);
}
}
$c = new c();
$c->cc();
——————————————————
$arr = array();
$a = “”;
func1($hogehoge,&$arr,$a);
function func1($hogehoge,$arr,$a){
foreach( $hogehoge as $key => $value){
if(is_array($value)){
func1( $value,&$arr,$a.”/”.$key);
}else{
array_push($arr,$a.”/”.$value);
}
}
}
——————————————————
foreach($arr as $value){
echo $value.”\n”;
}
1.ループ内の換算、減算は、「前置加算子、減算子」の方が「後置加算子、減算子」よりはやい
つまりは、++$i, –$i をつかえってこと。
2.ループの場合は、do-whileが、whileより、ちょこっとが早い。for文が一番おそい。
可視性をあげるためにも、whileを推奨
3.foreach と while(each()) は、foreachがはやい
4.foreach で、keyを取得しない froeach( $array as $value ){} だけの方が1.1倍~1.3倍早い。
参考URL
http://itpro.nikkeibp.co.jp/article/COLUMN/20070704/276650/