【问题标题】:Shell script Rotate files while the file keep on updating with dataShell脚本在文件不断更新数据的同时旋转文件
【发布时间】:2015-06-17 16:41:26
【问题描述】:

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

我想知道在将消息从日志文件复制到新日志文件期间的飞行消息状态?

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

谁能帮我理解一下?

【问题讨论】:

  • 不确定这是否是您需要的,但我的方法是创建每日文件并使用 find ./ -name log* -mtime +5 -delete 删除 5 天前的文件

标签: bash logging


【解决方案1】:

有一些实用程序为消息记录提供支持。 除了建议的logrotate,我通常使用syslogd 在文件达到所需的最大尺寸时旋转文件。

【讨论】:

    【解决方案2】:

    这取决于写入日志的进程。 最好的方法是将日志文件移动到新位置,创建新文件并使用日志向进程发送一些信号,强制它开始使用新文件 喜欢:

    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
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      相关资源
      最近更新 更多