记Linux正在log的日志备份

MySQL的慢查询日志在日积月累下 达到了40G的大小,磁盘瞬间被占满,应用也开始集体出现SQL异常。
于是手动将慢日志清空,部分应用进行重启。使得整个系统得到恢复。
为了避免这种情况,就开始百度如何使用shell脚本进行日志备份。
最终找到如下脚本

cp /pathToFile/log.log /pathTobackupFile/log.`date +%Y%m%d`.log> /dev/null 2>&1 &
cat /dev/null > /pathToFile/log.log

使用IO流重定向进行正在log的日志进行备份。
关键性脚本找到了,开始编写定时任务。总不能隔几天手动执行一次,万一时间长了忘记执行那不是就GG了么

开始编写脚本

首次编写脚本如下

cd $target_dir
cp $source_dir/$file_name $target_dir/$source_file > /dev/null 2>&1 &
cat /dev/null > $source_dir/$file_name
tar zcfv $tar_file $source_file
find $target_dir -mtime +7 | grep "tar.gz" | xargs rm -f

执行上面备份日志的核心脚本,并进行压缩,删除7天之前的备份。

执行脚本

看起来没有什么问题,于是信心满满的执行。
结果非常的amazing啊,在备份目录下的备份文件什么内容都没有。
这就让人很迷惑了,手动一条一条的执行上述脚本均没有任何问题。正在log的日志文件也正常的进行备份了,只是出现了如下的提示

[root@i]# cp /pathToFile/log.log /pathTobackupFile/log.`date +%Y%m%d`.log> /dev/null 2>&1 &
[1] 32372
[root@i]# cat /dev/null > /pathToFile/log.log
[1]+  Done  cp -i /pathToFile/log.log /pathTobackupFile/log.`date +%Y%m%d`.log> /dev/null 2>&1 &

由此我大胆的猜测,在脚本中 cp命令没有执行完成。于是将脚本改成如下

cd $target_dir
cp $source_dir/$file_name $target_dir/$source_file > /dev/null 2>&1 &
sleep 1
cat /dev/null > $source_dir/$file_name
tar zcfv $tar_file $source_file
find $target_dir -mtime +7 | grep "tar.gz" | xargs rm -f

再次执行脚本,OK了
具体原因,后续在查资料,先写到这里


增加一个说明

2020-06-12 10:40:38

  • 此脚本不要用在crontab中,会将部分重定向的io流中的内容覆盖到crontab的配置中,导致所有的crontab异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值