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