用下面的脚本做每天的weblogic日志分割备份,不知道为什么会在日志前部生成很多十六进制为“00 00”的空字符(如截图)
nowdate=`date +%Y%m%d%H%M`
cp /home/bea1/base_domain/bin/nohup.out /home/bea1/base_domain/bin/nohup.out.$nowdate
echo "It's the system log for" $nowdate > /home/bea1/base_domain/bin/nohup.out
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
根据你在问题评论的附加信息,原因很明显了:
你的日志打开时没有
O_APPEND
标志,导致每次写入是在上次写入的地方继续而不是到文件末尾追加(你用 echo 把文件截断了,因此写日志的程序的位置在文件末尾之后)。你用过 logrotate 之后就会明白,日志文件切了之后是要通知写日志的程序的,一些程序的日志文件是需要延迟压缩的,这样它们才能打开新的日志文件来写入。
如果你改不了写日志的程序的话,可以做个命名管道来接收日志数据。
大部分人都不能正确处理日志切换的逻辑,所以还是交给 logrotate 做吧 ^_^
/etc/logrotate.conf中追加以下内容,每日能生成日志备份,但仍有空字符
/home/bea1/basedomain/bin/nohup.out{
daily
copytruncate
dateext
olddir /home/bea1/basedomain/bin
nocompre
rotate 100
}