วันพุธ, ธันวาคม 14, 2548

log rotation บน solaris

เดี๋ยวนี้มีอะไรเกี่ยวกับ solaris มากเหลือเกิน วุ่นวายดี อันนี้จะเป้นเรื่องย้อนหลังหน่อย เกี่ยวกับ log rotation บน solaris นั้นล่ะ คือที่ผ่านมาได้จับงานอยู่งานหนึ่งเขียน application จากนั้นจะต้องทำ log rotation บน solaris ซึงมันเป็นเครื่องของคนอื่น แถมไ่ม่ได้ลง logrotate บนนั้นอีก (ทำไม ที่นั้นไม่ใช้ logrotate หว่า ไม่เข้าใจ) เลยต้องมาเขียนเอง

ขอเอา script มาแปะไว้กันหาย

#!/usr/bin/bash
archiveName=blabla
archiveBack=7
archivePath=/some/archive/log/path

logPath1=/where/path/log/for/archive/1
logPath2=/where/path/log/for/archive/2

#archiveDate=`date '+%Y-%m-%d'`
archiveDate=`getbefortoday`


# ---- begin make archive ----
archiveNo=0
n=$archiveBack

echo "starting archiving log file of $archiveDate ..."

cd $archivePath

for ((i = 0; i <= $archiveBack; i++)); do
   if [ -w $archiveName.$n.tar.bz2 ] ; then
     m=$(($n + 1))
     mv -f $archiveName.$n.tar.bz2      $archiveName.$m.tar.bz2
   fi
   n=$(($n - 1))
done

# tar and compress log files
cd $archivePath
tar -cf $archiveName.0.tar         $logPath1/$archiveDate.*         $logPath2/$archiveDate.*
bzip2 -9f $archiveName.0.tar
echo "finish archive." ; echo " "


echo "starting delete old log files..."
rm -rf $logPath1/$archiveDate.* $logPath2/$archiveDate.*
echo "finish delete old log files" ; echo " "


# delete old archive log file
echo "starting delete old archive log files."
rm -f $archivePath/$archiveName.$((archiveBack + 1)).tar.bz2


จาก scirpt ดังกล่าวจะมีบรรทัดหนึ่ง คือ archiveDate=`getbefortoday` ตรงนี้จะไปเรียก java app เล็กๆ ที่หาวันย้อนหลังของเครื่องไป 1 วัน โดยมี format yyyy-mm-dd ซึ่งโดยปกติบน linux ผมจะใช้คำสั่ง date แล้วใส่ format เอา แต่บน solaris มันสั่งไม่เหมือนกัน แถมรีบๆ เขียน java app มันซะเลย

ใครมีวิธีดีกว่านี้บอกให้หายโง่หน่อยเถอะครับ

.

ไม่มีความคิดเห็น: