我需要一个shell脚本来轮换日志文件,同时不断更新。
#!/bin/bash
log-file=$1
if [ ! -f $log-file ]; then
echo "log file not found $log-file"
exit 1
fi
times-tamp=`date +%Y%m%d`
new-log-file=$log-file.$time-stamp
cp $log-file $new-log-file
cat /dev/null > $log-file
gzip -f -9 $new-log-file
我想知道从日志文件到新日志文件的邮件复制过程中的飞行中消息状态?
这些邮件会丢失吗?如果我们丢失了飞行中的消息,那么我该如何轮换这些文件。
有人可以帮我理解吗?
答案 0 :(得分:2)
有一些实用程序为消息记录提供支持。
在建议的logrotate
旁边,我通常使用syslogd
在文件达到所需的最大尺寸时旋转文件。
答案 1 :(得分:0)
这取决于写入日志的进程。 最好的方法是将日志文件移动到新位置,创建新文件并使用日志向进程发送一些信号,这将强制它开始使用新文件 像:
mv log log.1
touch log
kill -HUP `pgrep -f process_using_the_log`
但最好使用logrotate
Apache logrotate示例:
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}