かわかみです.
>>>>> In <69u2k8$78q$1 _at_ meshsv17.tk.mesh.ad.jp>
>>>>> owl _at_ muc.biglobe.ne.jp (Minoru Saito) wrote:
MS> 野村さんのスクリプト、感動しました。すぐに試し、ログを整理し
MS> やすいように /var/adm/Old.log を設け、
MS> #!/bin/bash
MS> cd /var/adm/Old.log
MS> for i in messages syslog
MS> do
MS> diff ../${i} ${i}.1 > dif.${i}
MS> mv ${i}.2 ${i}.3
MS> mv ${i}.1 ${i}.2
MS> cat ../${i} > ${i}.1
MS> :>../${i}
MS> done
↓うちではこんなの使っています.
1日1回起動し, /etc/syslog.conf に書かれているログファイルそれぞれにつき
LIM_SIZE とファイルサイズを比較し, それを超えていればディレクトリ
/var/log/.oldlogs の下に移動するというものです.
(ちゃんとした人が書けばもう少しきれいに書けそうですが...(^^;)
何かの参考になれば幸いです.
注) sed やってるところの [] の中身はスペースとタブです.
--------(ここから)--------(ここから)--------(ここから)--------(ここから)--
#!/bin/sh
#
# Roll over the syslogd log files
#
PATH=/bin:/usr/bin
SYSLOGCONF=/etc/syslog.conf
PIDFILE=/var/run/syslogd.pid
OLDDIR=/var/log/.oldlogs
LIM_SIZE=300
main()
{
echo "Rotating syslog log files:"
LOGFILES=`sed -n '
/^#/d
/^$/d
s/[^ ]*[ ]*\(\/.*\)/\1/p' < $SYSLOGCONF \
| sort | uniq | egrep -v '^(/dev/|@)'`
for FILE in ${LOGFILES}
{
if [ -f $FILE ]; then
eachfile $FILE
fi
}
echo sending SIGHUP to syslogd
kill -1 `cat $PIDFILE`
}
eachfile()
{
size=`sum $1 | awk '{print $2}'`
if [ $size -ge $LIM_SIZE ]; then
echo "Rotating $1 file."
roll5 $1
fi
}
roll()
{
if [ -f "$1" ]; then
mv "$1" "$2"
fi
}
roll5()
{
TAIL=`echo $1 | sed 's/.*\///'`
OLDLOG="${OLDDIR}/${TAIL}"
roll "$OLDLOG".4 "$OLDLOG".5
roll "$OLDLOG".3 "$OLDLOG".4
roll "$OLDLOG".2 "$OLDLOG".3
roll "$OLDLOG".1 "$OLDLOG".2
roll "$1" "$OLDLOG".1
cp /dev/null $1
chmod 644 $1
}
main ${1+"$@"}
exit 0
--------(ここまで)--------(ここまで)--------(ここまで)--------(ここまで)--
--
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
川上 浩樹 @機械.工.東京大 <kawakami _at_ sml.t.u-tokyo.ac.jp>
PGP public key: http://www.sml.t.u-tokyo.ac.jp/~kawakami/pgp/
PGP fingerprint: B2 31 69 01 E3 43 AD D0 32 02 9F E9 14 5C 97 AB
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛