LINUX.ORG.RU
ФорумAdmin

Не пишутся логи после удаления файлов логов

 


1

1

Всем привет )

помогите с проблемой разобраться.
Debian 7. На ней стоит rsyslog сервер и loganalyzer.
В один прекрасный момент я не смог зайти в loganalyzer, оказалось, что /var заполнено на 100%.

Выяснилось, что файлы syslog, messages, и прочие, были пустыми; зато всё почему-то писалось в syslog.1, messages.1 и прочие, и они раздувались до гигабайтных размеров. Ротации, сжатия файлов и удаления не происходило. Пробовал что-то покрутить в конфигах logrotate, но ничего не менялось.

Я подумал, что, может с файлами что-то не так и переместил все логи syslog* и messages* из папки /var/log в другую (в другой раздел. теперь /var заполнен лишь на 60%).

После этого, никакие события никуда не логгируются. Команда logger testtext тоже никуда не записывает (ранее писало в messages).
создал файлы syslog и messages руками, назначил права 640 и владельцев root:adm по аналогии с другими логами в этой папке. Всё равно не пишутся логи. Кто-то посоветовал рестартнуть rsyslog, не помогло. Назначение прав 777 тоже не дало эффекта, значит, проблема не в этом.

Собственно, вопрос первый:
как вернуть логгирование?..

Вопрос второй, что случилось с logrotate? (чуть позже выложу конфиги).



Последнее исправление: Piter_prbg (всего исправлений: 1)

Ответ на: комментарий от anonymous

Спасибо за ответ, не успел попробовать этот вариант, тут под давлением перезагрузил сервак, и логгирование заработало.

За ротацию пока не знаю.

Piter_prbg
() автор топика

Механизм фокуса прост: Удаление файла делает его недоступным только при попытке открытия. Если файл был кем-то открыт до удаления, он станет недоступным ему аж после закрытия.

Ты, видимо, удаляешь лог, а сервис продолжает пузырить данные по старому inode открытого им однажды лога, которого уже не будет видно в ФС новым процессам. Это выглядит как «отсутствие логирования».

Правильный способ стрижки логов на лету — не rm -f logfile, а true > logfile. При этом у файла не меняется inode, поскольку сам файл не удаляется.

blexey ★★★★★
()
Последнее исправление: blexey (всего исправлений: 1)

Вопрос второй, что случилось с logrotate? (чуть позже выложу конфиги).

Думаю, кто-то удалил в конфиге что-то про postrotate. А-ля

        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
Пример из какого-то Дебиана, кстати.

AS ★★★★★
()
Ответ на: комментарий от blexey

blexey, спасибо за разъяснение.

и так, после перезагрузки у меня логи пишутся (логично, что система уже не пишет в старый inode).

Однако, logrotate всё равно чудит: syslog обнуляется, а syslog.1 вырастает до гигабайтов и всё.

вот конфиги.
/etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0


/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        rotate 4
        daily
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}

Piter_prbg
() автор топика

ну и /etc/logrotate.conf


# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
# compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

invoke-rc.d rsyslog rotate

А существует/выполняется ли скрипт, который вызывается при этой команде (подробности тут), и что он у тебя делает с логом в дополнение к основным действиям из конфига?

blexey ★★★★★
()
Ответ на: комментарий от blexey

Не знаю, выполняется ли он,
всё так и было )

судя по тому, что написано здесь http://askubuntu.com/questions/404331/purpose-of-postrotate-invoke-rc-d-rsysl...
он нужен, чтобы после ротирования rsyslog переоткрыл файл, в который пишется лог.

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

сделал в скрипте вместо

invoke-rc.d rsyslog rotate > /dev/null

поставил вот это, что товарищ выше писал:
pkill -HUP rsyslog


вроде всё работает, если поставить там size 100k и руками запускать, то всё ротируется на ура ))
попробую в таком виде поставить daily и посмотреть, будет ли работать автоматически.

Piter_prbg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.