Logrotate:旋转非日志文件?


17

我有一个备份脚本,可以压缩各种文件和目录并创建.tgz档案。文件被命名,例如

...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz

我要管理这些文件,以便仅保留最后5个备份,并删除较旧的文件。

我可以使用logrotate做到这一点吗?它们不是日志文件,已经被压缩。它们位于/ root而不位于/ var / log中-我仍然可以使用它吗?

谢谢

Answers:


3

Logrotate旋转文件,所以答案是肯定的-可能的,如果没有足够的权限,则将它们放在/ backup或其他位置。检查轮换日志具有哪些组和用户:-)。

logrotate中有用于压缩的选项,如果未配置“ compress”,则可以-那就不要尝试了。同样在您的情况下,“旋转5”选项。

看一下/etc/logrotate.d(或它在系统中的存储位置)


26

如果不更改您的流程,则单独使用logrotate不会满足您在此处寻找的需求。这里的关键问题是,尽管logrotate可以使用通配符,但是如果您将通配符用作通配符,则不会将它们视为一个文件,而是尝试逐个旋转所有文件,这绝对不是您想要的。

但是,只要创建的最新备份没有日期戳,就可以按照您描述的方式进行操作。/root/backup.tar.gz例如,如果您创建备份过程,则可以使用以下logrotate配置:

/root/backup.tar.gz {
    rotate 5
    nocompress
    dateext
    dateformat _%Y-%m-%d
    extension .tar.gz
    missingok
}

这些选项的快速摘要:

  • rotate 5 -删除前保持5圈
  • nocompress -旋转后请勿压缩文件
  • dateext -使用日期作为轮转扩展名而不是递增数字
  • dateformat _%Y-%m-%d -设置您要使用的日期扩展名格式
  • extension .tar.gz- .tar.gz旋转扩展后来
  • missingok -如果我们要旋转的文件不存在,请不要担心它并继续前进(默认为抛出错误)

希望这可以帮助!


1
辛苦了 通过阅读本文,我学到了一些东西。不过,我确实想补充一点,某些发行版,尤其是RedHat EL,往往会剔除不是“ Enterprise Ready”的选项,因此是YMMV。
zerolagtime 2010年

根据此解决方案 stackoverflow.com/questions/14858752/…logrotate 可以完成任务。
彼得

22

您不必使用logrotate即可。只需使用如下命令:

ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1

此命令将保留最新的5个文件,并删除其余的文件(如果有)。您可以在cron作业中使用它。


但这不会旋转
。...– simpleuser

不回答问题。
kubanczyk

4
问题是要保留五个最新备份,而这恰好做到了。更简单:ls -t1 / root / backup_ * | 尾-n +6 | xargs rm -f
yoyoma2

这回答了我的问题。不幸的是,最初的问题是我可以用Google-fu找到的最接近的问题。
Sukima

0

我只是有同样的情况。Logrotate听起来很酷,但由于它与数据和文件名不匹配,所以100%不适用于我。

因此,为避免混淆,我决定合并以下行以在创建当前备份后执行,以保留最后5个备份。

我的日志是:

  • tbl-bcx-20180308_010501.tar.bz2
  • tbl-bcx-20180307_010501.tar.bz2
  • tbl-bcx-20180306_010501.tar.bz2

在我的备用脚本中添加了新行(基于上面的评论)

  • 查找/ BCX / dumpsql / -type f | 排序-r | 尾-n +6 | xargs rm

问候,


-1

您可以手动旋转它。

rotating_logger()
{

_LOG_FILE_=${1}
_MESSAGE_TO_ECHO_=${2}

_LOG_FILE_BYTES_SIZE_=`wc -c ${_LOG_FILE_} | awk '{print $1}'`

#echo "_LOG_FILE_BYTES_SIZE_ : ${_LOG_FILE_BYTES_SIZE_}"

# in MB
if [ ${_LOG_FILE_BYTES_SIZE_} -gt ${_FILE_SIZE_IN_BYTES_} ] ; then
        #cat /dev/null > ${_LOG_FILE_}
         for (( i=${_LOG_ROTATE_MAX_INDEX_}; i>=1; i-- ))
        do
                 if [ $i -eq ${_LOG_ROTATE_MAX_INDEX_} -a -f ${_LOG_FILE_}.$i ] ; then
                        rm -rf ${_LOG_FILE_}.$i
                 fi

                if [ $i -gt 10 ] ; then
                        rm -rf ${_LOG_FILE_}.10
                elif [ $i -eq 9 -a -f ${_LOG_FILE_}.9 ] ; then
                       mv ${_LOG_FILE_}.9 ${_LOG_FILE_}.10
                elif [ $i -eq 8 -a -f ${_LOG_FILE_}.8 ] ; then
                       mv ${_LOG_FILE_}.8 ${_LOG_FILE_}.9
                elif [ $i -eq 7 -a -f ${_LOG_FILE_}.7 ] ; then
                       mv ${_LOG_FILE_}.7 ${_LOG_FILE_}.8
                elif [ $i -eq 6 -a -f ${_LOG_FILE_}.6 ] ; then
                       mv ${_LOG_FILE_}.6 ${_LOG_FILE_}.7
                elif [ $i -eq 5 -a -f ${_LOG_FILE_}.5 ] ; then
                       mv ${_LOG_FILE_}.5 ${_LOG_FILE_}.6
                elif [ $i -eq 4 -a -f ${_LOG_FILE_}.4  ] ; then
                       mv ${_LOG_FILE_}.4 ${_LOG_FILE_}.5
                elif [ $i -eq 3 -a -f ${_LOG_FILE_}.3  ] ; then
                       mv ${_LOG_FILE_}.3 ${_LOG_FILE_}.4
                elif [ $i -eq 2 -a -f ${_LOG_FILE_}.2  ] ; then
                       mv ${_LOG_FILE_}.2 ${_LOG_FILE_}.3
                elif [ $i -eq 1 -a -f ${_LOG_FILE_}.1 ] ; then
                       mv ${_LOG_FILE_}.1 ${_LOG_FILE_}.2
                fi
        done
        mv ${_LOG_FILE_} ${_LOG_FILE_}.1
        touch ${_LOG_FILE_}
fi

echo `date +%Y-%m-%d:%H:%M:%S` : "${_MESSAGE_TO_ECHO_}" >> ${_LOG_FILE_}
#echo "" >> ${_LOG_FILE_}
}

现在将数据放入日志,只需执行

rotating_logger <file_path> "Welcome world!"

1
如果您希望它有用,也许您可​​以花一些精力来格式化您的帖子。
蒂姆(Tim)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.