VS> Все дети знают что логи можно чистить так `cat /dev/null >ххх.log
VS> Все дяди знают что эта чистка чpевата, ибо если файл не закpыт, наступят
VS> тpаблы Все начинающие админы знают, что не все пpоги закpывают логи
VS> Hо начинающие сисадмины не знают как сделать так, что бы на сто пpоцентов
VS> коpектно чистить лог. Hе погут ли матеpые админы ? ;-)
Можно делать так:
# tee xxx.log < /dev/null
или
# cp /dev/null xxx.log
В этом случае видно, что i-node для этого имени файла не меняется
(всегда можно проверить через ls -i xxx.log).
Другое дело, что есть некоторые логи пишутся в файл так, что он открывается
каждый раз заново (потому что в него пишут разные процессы). Hапример
это /var/log/wtmp
И бывает надобность сохранять эту статистику.
В этом случае можно делать так:
# rm -f /var/log/wtmp.old # это для надёжность :)
# ln /var/log/wtmp /var/log/wtmp.old # делаем hard link
# cp /var/run/utmp /var/log/wtmp.new # новый файл для сохранения текущих users
# mv /var/log/wtmp.zero /var/log/wtmp
# ну и обработка и сохранение /var/log/wtmp.old
VS> P.S. Как пpовеpить откpыт файл или нет, и кем соответственно.
В linux - это команда fuser.
В разных OS есть разные команды (fuser на SYSV, fstat на *BSD),
но есть одна довольно портабельная штучка под названием lsof
Берется она на ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/
А выглядит (в простейшем случае) её использование примерно так:
# lsof /var/log/syslog
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
syslogd 51 root 8w REG 3, 3 1281999 10193
/var/log/syslog
А вот fuser:
# fuser -v /var/log/syslog
USER PID ACCESS COMMAND
/var/log/syslog root 51 f.... syslogd
С уважением,
Дмитрий Белослюдцев.
--
Dmitri Beloslioudtsev, Euro InterSoft East, Zelenograd, Russia
mailto:dnb@inter-soft.com.ru http://www.inter-soft.com.ru/~dnb
--- ifmail v.2.10dev
* Origin: EuroInterSoft, Zelenograd, Russia (2:5020/400@fidonet)