Shell脚本在文件继续使用数据进行更新时旋转文件

时间:2015-06-17 06:28:44

标签: bash logging

我需要一个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

我想知道从日志文件到新日志文件的邮件复制过程中的飞行中消息状态?

这些邮件会丢失吗?如果我们丢失了飞行中的消息,那么我该如何轮换这些文件。

有人可以帮我理解吗?

2 个答案:

答案 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
    }