Answers:
如果不更改您的流程,则单独使用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
-如果我们要旋转的文件不存在,请不要担心它并继续前进(默认为抛出错误)希望这可以帮助!
您不必使用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!"