PDA

Bekijk de volledige versie : при ротации теряется часть логов



leniviy
12-04-2009, 15:55
Привет. logrotate у меня срабатывает раз в сутки в 0:00, но часть инфы пропадает. Я думаю, что при ротации сохраняется только messages, а messages.0 не сохраняется.
Я не уверен, но по-моему syslogd сам переименовывает messages в messages.0 при достижении опр. размера файла. Как это запретить?

Вот мои конфиги.
S05syslogd

#!/bin/sh
#
# Startup script for syslogd
#
# Stop myself if running
if [ -n "`pidof syslogd`" ]; then
killall syslogd 2>/dev/null
fi

if [ ! -h /tmp/syslog.log ]; then
# copy content of original syslogd to new syslog.
cat /tmp/syslog.log >> /opt/var/log/messages
# remove old syslog.log
rm /tmp/syslog.log
ln -s /opt/var/log/messages /tmp/syslog.log
fi
/sbin/syslogd -m 0 -O /opt/var/log/messages -S -l 7


logrotate.conf

compress

/opt/var/log/messages {
size 1024k
weekly
rotate 9
postrotate
killall -HUP syslogd
endscript
}

include /opt/etc/logrotate.d

Сhemist
15-04-2009, 09:34
но часть инфы пропадает

Проверил у себя. "Пропадает" - мягко сказано! У меня в архиве хранится только последний час лога!!! Офигел :(

Порылся тут в форуме и нашел решение:

После залинковки /tmp/syslog.log на /opt/var/log/messages страдаю от фичи oleg'овской прошивки "Enabled log rotation, so your logs should not be bigger than 200K". Ee можно как-то отключить?

Да можно, в S05syslogd исправьте вот эту строку (добавьте ключик -s 0):

/sbin/syslogd -m 0 -s 0 -O /opt/var/log/messages -S -l 7

Проверил - помогло :)

Да, предлагаю более "правильный" S05syslogd:
#!/bin/sh
#
# Startup script for syslogd
#
start() {
# Stop myself if running
if [ -n "`pidof syslogd`" ]; then
killall syslogd 2>/dev/null
logger "syslogd has been stoped"
fi

if [ ! -h /tmp/syslog.log ]; then
# copy content of original syslogd to new syslog.
cat /tmp/syslog.log >> /opt/var/log/messages
# remove old syslog.log
rm /tmp/syslog.log
ln -s /opt/var/log/messages /tmp/syslog.log
fi
/sbin/syslogd -m 0 -s 0 -O /opt/var/log/messages -S -l 7
logger "syslogd has been started"
}

stop() {
killall syslogd 2>/dev/null
}

case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo "Usage: $0 (start|stop)"
exit 1
;;
esac