Logrotate:旋转非日志文件?

我有一个备份脚本,压缩各种文件和目录,并创build.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 

我想要pipe理这些文件,只保留最后5个备份,旧文件被删除。

我可以使用logrotate来做到这一点? 它们不是日志文件,并且已经被压缩。 他们在/根,而不是在/ var /日志 – 我仍然可以使用它?

谢谢

Logrotate旋转文件,所以答案是肯定的 – 可能,如果没有足够的权限,然后把它们放在/备份什么的。 检查什么组和用户旋转日志有:-)。

在logrotate中有压缩选项,如果没有configuration“compress”,那么它不会尝试。 另外在你的情况下,“旋转5”选项。

看看/etc/logrotate.d(或者将它存储在你的系统中)

如果不改变你的过程,logrotate自己不会做你在这里寻找的东西。 这里的关键问题在于,虽然logrotate可以使用通配符,但是如果这样做,它将不会将文件视为一个文件,而是尝试单独旋转所有文件,这绝对不是您想要的。

但是,只要最近创build的备份不带date戳,就可以按照您描述的方式工作。 如果你的备份进程创build/root/backup.tar.gz例如,你可以使用下面的logrotateconfiguration:

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

这里的选项的快速简要说明:

  • rotate 5 – 在删除之前保持5次旋转
  • nocompress – 旋转后不压缩文件
  • dateext – 使用date作为dateext扩展而不是递增数字
  • dateformat _%Y-%m-%d – 设置您要使用的date扩展格式
  • extension .tar.gz – 使.tar.gz扩展后的.tar.gz
  • 如果我们想要旋转的文件不在那里,不要担心,继续前进(默认是抛出一个错误)

希望这可以帮助!

你不必使用logrotate来做到这一点。 只需使用这样的命令:

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

该命令将离开最近的5个文件并删除剩余的(如果有的话)。 你可以在cron工作中使用它。

您可以手动旋转它。

 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!"